我使用以下代码获取具有IP地址的计算机列表。它打印出主机名和IP地址。如果主机处于脱机状态,则表示" $ computername处于脱机状态。"这是代码:
$csv = Get-Content TEST_MACHINES.csv
foreach ($computer in $csv)
{
try
{
Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address
}
catch
{
"$computer is offline"
}
}
效果很好并输出如下数据:
地址IPV4Address
------- -----------
TESTMACHINE 192.168.1.1
TESTMACHINE2 192.168.1.2
TESTMACHINE3处于离线状态。
然而,没有多少技巧允许我将所有这些写入文件,即使它在控制台中显示如此。它写入空白文件或仅写入异常。
如何完全按原样捕获此输出?
答案 0 :(得分:2)
您可以使用与所选测试连接字段相同的字段名称创建自定义PowerShell对象,然后将成功和失败导出为CSV。请参阅下面的示例:
$csv = Get-Content TEST_MACHINES.csv
foreach ($computer in $csv)
{
try
{
Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Export-Csv -Path .\ConnectionTest.csv -Append
}
catch
{
$Output = New-Object PSObject -Property @{
Address = $computer
IPV4Address = "Offline"
}
$Output | Export-Csv -Path .\ConnectionTest.csv -Append
}
}
答案 1 :(得分:1)
在我编写脚本的方式中,我使用简单的if..then..else循环。这对我来说似乎最合乎逻辑。你确实尝试过" Out-File"在管道之后切换,不是吗?...我刚刚在localhost和一些随机名称上运行了以下内容,并且工作得很好......
$csv = Get-Content TEST_MACHINES.csv
foreach ($computer in $csv)
{
if (Test-Connection $computer -Count 1 -Quiet)
{
Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address | Out-file -append "SomeFile.txt"
}
else
{
"$computer is offline" | Out-File -Append "SomeFile.txt"
}
}
答案 2 :(得分:1)
试试这个:
$csv = Get-Content TEST_MACHINES.csv
'' > foo.log
foreach ($computer in $csv)
{
try
{
Test-Connection $computer -Count 1 -ErrorAction Stop | Select Address, IPV4Address >> foo.log
}
catch
{
"$computer is offline" >> foo.log
}
}