Ping一个主机名列表,并将结果输出到powershell中的csv

时间:2015-04-07 13:58:54

标签: loops powershell csv ping

我有一个很大的主机名列表,我需要ping它以查看它们是上升还是下降。我在脚本编写方面并不是那么出色,但我设法解决了这个问题:

$names = Get-content "hnames.txt"

foreach ($name in $names){
  if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue){
    Write-Host "$name is up" -ForegroundColor Green
  }
  else{
    Write-Host "$name is down" -ForegroundColor Red
  }
}

这让我得到了我需要的东西,但我现在需要把这些结果写成csv文件,我不知道该怎么做。

请帮助!

4 个答案:

答案 0 :(得分:7)

您可以使用以下代码(我只是将写入主机调用更改为CSV格式)并使用“PowerShell.exe script.ps> output.csv”执行它 请注意,您必须从包含hnames.txt的文件夹中执行它,或者只需将“hnames.txt”更改为完整路径。

$names = Get-content "hnames.txt"

foreach ($name in $names){
  if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue){
    Write-Host "$name,up"
  }
  else{
    Write-Host "$name,down"
  }
}

P.S。您还可以使用Out-File Cmdlet创建CSV文件

答案 1 :(得分:1)

我是Powershell的全新手,因此我将其作为一项学习任务,因为我需要一种快速简单的方法来检查PC的上/下状态列表。需要进行这些调整才能将其干净地输出到屏幕和txt文件

$Output= @()
$names = Get-content "hnames.txt"
foreach ($name in $names){
  if (Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue){
   $Output+= "$name,up"
   Write-Host "$Name,up"
  }
  else{
    $Output+= "$name,down"
    Write-Host "$Name,down"
  }
}
$Output | Out-file "C:\support\result.csv"

答案 2 :(得分:0)

    $Output= @()
    $names = Get-Content ".\input\Servers.txt"
    foreach ($name in $names){
      if (Test-Connection -Delay 15 -ComputerName $name -Count 1 -ErrorAction SilentlyContinue){
       $Output+= "$name,up"
       Write-Host "$Name,up" -ForegroundColor Green
      }
      else{
        $Output+= "$name,down"
        Write-Host "$Name,down" -ForegroundColor Red
      }
    }
    $Output | Out-file ".\output\result.csv"

这是一种清洁的工具,包括原始的前台选项,但是,顺便说一句,“延迟”开关似乎被忽略了-PB

答案 3 :(得分:0)

我会这样做。使用计算机列表和-asjob效果很好。如果主机启动,则Responsetime属性将为非空。

$names = Get-content hnames.txt
test-connection $names -asjob -count 1 | recieve-job -wait -auto