Powershell - 同一代码的输出不一致

Powershell - 同一代码的输出不一致

我确信这是一个菜鸟问题,但我注意到一些看似不一致的行为,我很想了解原因。

我使用了一些 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

你可以使用哈希表添加计算属性在显示对象之前将其添加到对象上,并指定列标题在表中。要添加计算属性,请使用PropertyGroupBy参数。

$output | 
  Sort-Object pscomputername, remoteaddress |
    Format-Table -Property pscomputername, 
      @{Name='sourceaddress';Expression={$_.sourceaddress.IPAddress}},
      remoteaddress, remoteport, tcptestsucceeded

相关内容