我确信这是一个菜鸟问题,但我注意到一些看似不一致的行为,我很想了解原因。
我使用了一些 PowerShell 来测试网络连接。我定义了一个 IP 地址数组和一个服务器名称数组,然后通过invoke-command 将它们提供给 test-netconnection,如下所示:
$cred=get-credential
$results=@()
#insert endpoints here:
$ep=@"
10.1.1.123
10.1.1.124
"@ -split "`n" | % { $_.trim() }
#Source servernames go here:
$c = @"
SERVER1
SERVER2
"@ -split "`n" | % { $_.trim() }
$c=$c|%{$_+".domain.contoso.com"} #append FQDN
$sb={$args|%{Test-NetConnection $_ -port 1234}} #define scriptblock
$output=Invoke-Command -cn $c -Credential $cred -ArgumentList $ep -ScriptBlock $sb
$results+=$output|sort-object pscomputername, remoteaddress|format-table pscomputername,sourceaddress, remoteaddress, remoteport, tcptestsucceeded
$results
因此,如果我运行它,我会得到一个格式很好的结果表,但我的源地址是某种丑陋的 MSFT_NetIPAddress 对象。
但奇怪的是——如果我在任何时候“手动”运行 test-netconnection,行为就会突然发生变化,我会得到一个 Sourceaddress 的 IP 地址。
更奇怪的是,我的现存的输出变量发生变化。它从显示数组中每个元素的所有成员变为仅显示运行 test-netconnection 时通常会看到的常见成员。
这是怎么回事?更重要的是,如何才能让 IP 地址可靠地显示?
答案1
用一个计算财产 {$_.sourceaddress.IPAddress}
:
$output |
Sort-Object pscomputername, remoteaddress |
Format-Table -Property pscomputername,
{$_.sourceaddress.IPAddress},
remoteaddress, remoteport, tcptestsucceeded
你可以使用哈希表添加计算属性在显示对象之前将其添加到对象上,并指定列标题在表中。要添加计算属性,请使用Property
或GroupBy
参数。
$output |
Sort-Object pscomputername, remoteaddress |
Format-Table -Property pscomputername,
@{Name='sourceaddress';Expression={$_.sourceaddress.IPAddress}},
remoteaddress, remoteport, tcptestsucceeded