windows 在单个csv中添加来自多台计算机的具有自定义标题的值

hlswsv35  于 2022-11-18  发布在  Windows
关注(0)|答案(1)|浏览(111)

我需要完成下面的场景,为此我必须创建几个powershell脚本来完成它。
环境:Windows服务器和Windows客户端
场景1-创建在每天特定时间运行的脚本(使用任务计划程序)。此脚本会将当前计算机的主机名和IP地址推送到带有特定标头的csv文件中(我们将其称为“主机名”和“IP地址”)。这些标头不应更改,因为这些脚本同时从多台计算机运行,并且所有计算机数据应该附加到每个头,而不是在此操作继续时覆盖它们。2-从服务器,(15分钟后)获取此“计算机”列表(csv),则应使用它们的IP地址对每台计算机进行ping检查。如果在这些远程计算机上ping成功,它应该在每台计算机的名称及其IP地址旁边显示“此计算机已启动”。如果ping不成功,它应该在每台计算机的名称及其IP地址旁边显示“此计算机已关闭”。在这些“状态”信息之上,应该有另一个标头(比如“IsAlive”)。这个标头也应该被添加到csv中。
因此,通过这种设置,我可以了解哪些计算机在特定时间处于运行状态,在我触发它们的一些操作后,我可以了解它们是否仍处于运行状态。
老实说,我不能花很长的时间,我开始写一个脚本的第一步,但我不能合并的头部与值添加在他们下面。

$header="Hostname"
$outputfile="\\10.10.10.40\reports\upcomputers.csv"

Add-Content $outputfile -Value $header
$hostname >> $outputfile

如果我使用这个脚本(即使只有一个头),它会在主机名的每个字母后面添加“NULL”,并且不会在“Hostname”头下面附加其他主机名。

另外,我不知道从哪里开始添加第三个头(IsAlive),并添加每个Test-NetConnection查询的输出作为检查它们的IP地址。
最后,我的输出应该是这样的;
为第一步;

为第二步;

感谢您的帮助和信息
在请求的正文中陈述

fcg9iug3

fcg9iug31#

**阶段2:**使用PSCustomobject执行此操作得简单方法.请查看下面得示例代码:

$outputcsv = "C:\PowerShell\pingstatus.csv"
$hostlist = import-csv "C:\PowerShell\hostlist.csv"

$result = foreach($line in $hostlist){
    
    $pingtest = Test-Connection -ComputerName $line.Hostname -Quiet -Count 1 -ErrorAction SilentlyContinue

    if($pingtest) {
         $OutputMessage = "This computer is up"
      }
     else {
   
       $OutputMessage = "This computer is down"
          
     }
     [pscustomobject][ordered]@{
        HostName  = $line.Hostname
        IPAddress = $line.IPaddress
        IsAlive  = $OutputMessage
    }
     
}

 $result | Export-csv -Path $outputcsv -NoTypeInformation

主机名和IP地址输入将作为输入。注意:您的输入csv文件应包含主机名IP地址作为标题。**阶段1:**为什么不?

$outputfile="\\10.10.10.40\reports\upcomputers.csv"
$serverDetails = [PSCustomObject]@{
Hostname = "$env:COMPUTERNAME"
IPAddress = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration | where {$_.DHCPEnabled -ne $null -and $_.DefaultIPGateway -ne $null}).IPAddress | Select-Object -First 1
}

$serverDetails | Export-csv $outputfile -Append -NoTypeInformation

有多种方法来获得一台计算机的IP地址,我使用了Get-WMI对象。你可以使用其他简单的方法,如测试连接或获取网络IP地址。
要了解更多信息,请访问:请参见[PsCustomObject]:https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-pscustomobject?view=powershell-7.3

相关问题