PowerShell获取Cmdlet输出的特定成员

时间:2019-04-15 10:45:14

标签: powershell

如何在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是否提供一种从命令输出中提取这些值的方法?

谢谢。

1 个答案:

答案 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地址,然后给出值