如何在PowerShell中从cmdlet的输出中检索特定成员的值?
例如,我正在使用[System.Net.DNS] :: GetHostAddresses(“ google.com”)获取域的IP地址。输出还包含一些其他值,我只想提取字段“ IPAddressToString”的值。
PS C:\Windows\system32> [System.Net.DNS]::GetHostAddresses("google.com")
Address : 3456489900
AddressFamily : InterNetwork
ScopeId :
IsIPv6Multicast : False
IsIPv6LinkLocal : False
IsIPv6SiteLocal : False
IPAddressToString : 172.217.5.206
我将上述命令的输出通过管道传递到Get-Member,如下所示:
PS C:\Windows\system32> [System.Net.DNS]::GetHostAddresses("google.com") | Get-Member -Name IPAddressToString
TypeName: System.Net.IPAddress
Name MemberType Definition
---- ---------- ----------
IPAddressToString ScriptProperty System.Object IPAddressToString {get=$this.Tostring();}
它仅显示属性,而不显示其值。
PowerShell是否提供一种从命令输出中提取这些值的方法?
谢谢。
答案 0 :(得分:2)
Get-Member
未能提供所需信息的原因是它显示名称/类型/结构信息,而不显示值。 [咧嘴]如果要查看项目属性的值,请使用$Item | Select-Object -Property *
显示所有道具及其值。
要获取要在脚本中使用的值,请使用点符号获取值...像这样...
@([System.Net.DNS]::GetHostAddresses("google.com")).IPAddressToString[1]
将为您提供调用返回的IP地址数组中第二项的值。在我的系统上,这是IPv4地址-[0]
项是IPv6地址。
您发现,获得相同信息的另一种方法是像这样通过管道传输到Select-Object
cmdlet ...
([System.Net.DNS]::GetHostAddresses("google.com") |
Select-Object -ExpandProperty 'IPAddressToString')[1]
如果您想确定要获得的地址类型,请使用类似以下的方法...
@([System.Net.DNS]::GetHostAddresses("google.com")).
Where({$_.AddressFamily -eq 'Internetwork'}).
IPAddressToString
从目标获取地址,过滤IPv4地址,然后给出值