我有一个很大的主机名列表,我需要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文件,我不知道该怎么做。
请帮助!
答案 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"
答案 3 :(得分:0)
我会这样做。使用计算机列表和-asjob效果很好。如果主机启动,则Responsetime属性将为非空。
$names = Get-content hnames.txt
test-connection $names -asjob -count 1 | recieve-job -wait -auto