如何在 PowerShell 脚本中显示 TestConnection -Quiet 结果?

How to display TestConnection -Quiet result in PowerShell script?

Get-CIMInstance -ClassName Win32_Printer | Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}}, @{label="Status";expression={ForEach-Object{Test-Connection -ComputerName '{0}' $_.IPAddress -Count 1 -Quiet}}}

上面的代码给了我以下 o/p:

Name                          IPAddress       Status
----                          ---------       ------
Webex Document Loader         100.100.100.100
OneNote (Desktop)             111.111.111.111
Microsoft XPS Document Writer 120.120.120.120
Microsoft Print to PDF        123.123.123.123
Fax                           8.8.8.8

ForEach-Object{Test-Connection -ComputerName $IPAddress -Count 1 -Quiet} 分别为 运行 时,我得到以下 o/p:

False
False
False
False
True

我需要的是:

Name                          IPAddress       Status
----                          ---------       ------
Webex Document Loader         100.100.100.100 False
OneNote (Desktop)             111.111.111.111 False
Microsoft XPS Document Writer 120.120.120.120 False
Microsoft Print to PDF        123.123.123.123 False
Fax                           8.8.8.8         True

如何在单个 cmdlet(流水线)中实现此目的?提前致谢

从 属性 表达式中删除 ForEach-Object{} 语句,然后将其拆分为两个 Select-Object 调用 - 第一个将计算 IPAddress 属性 值,第二个可以将其用于 Status 计算:

Get-CIMInstance -ClassName Win32_Printer | Select-Object Name, @{label="IPAddress";expression={($_.comment | Select-string -Pattern "\d{1,3}(\.\d{1,3}){3}" -AllMatches).Matches.value}} |Select Name,IPAddress,@{label="Status";expression={Test-Connection -ComputerName $_.IPAddress -Count 1 -Quiet}}