我正在使用Invoke-Ping功能(在这里找到:https://gallery.technet.microsoft.com/scriptcenter/Invoke-Ping-Test-in-b553242a),它运行良好。它创建的输出如下所示:
> $Info = Invoke-Ping $ComputerNames -ErrorAction SilentlyContinue
> $Info[0..2]
Address : Machine1
IPV4Address : 10.10.44.213
IPV6Address :
ResponseTime : 0
STATUS : Responding
Address : Machine2
IPV4Address : 10.10.4.46
IPV6Address :
ResponseTime : 0
STATUS : Responding
Address : Machine3
IPV4Address : 10.10.4.58
IPV6Address :
ResponseTime : 0
STATUS : Responding
我遇到的问题是当我尝试使用$ Info.Address输出机器名时。当我输入$ Info.Address时,我得到了
OverloadDefinitions
-------------------
System.Object&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Address(int )
我确定这是因为.Address已经定义但我不知道如何解决这个问题并获得我需要的实际值 - 我的对象的地址值。我确定它很简单,但我只是无知......找到我的价值的诀窍是什么?
答案 0 :(得分:4)
使用此命令可能会对您有所帮助。
$Info | %{$_.Address
}
答案 1 :(得分:1)
这是一个有趣的问题。您好像在Test-Connection cmdlet中发现了一个错误。这就是Invoke-Ping用来ping计算机的内容。
PetSerAl是正确的。您可以使用ForEach来获得正确的输出。或者,您也可以手动指定要查找的数组中的项目。例如:
#Display Address of First item
$info[0].Address
#Display Address of All items
$info | Foreach {$_.Address}
#or
for ($i=0; $i -lt $info.Count; $i++) { $info[$i].Address }
答案 2 :(得分:1)
有趣的是,没有碰到这种情况,但似乎根本原因是数组有一个Address
方法。
您可以这样验证:Get-Member -InputObject @()
,或者使用您的代码Get-Member -InputObject $Info
进行验证。
为什么会这样?虽然它非常方便,但我们依赖的语言功能将从数组中解析出属性,并且直接在数组上的属性/方法将优先。这意味着我们需要求助于人们回答的各种变通方法。
干杯!