1

如果我在 Windows 7 机器上运行以下命令,则使用 PowerShell 2.0:

(Get-WmiObject Win32_NetworkAdapterConfiguration |
    Where { $_.IPAddress }

它返回

192.168.83.26
fe80::<IPv6 address>

如果我运行:

(Get-WmiObject Win32_NetworkAdapterConfiguration |
    Where { $_.IPAddress }.ToString()

它返回

System.Object[]

为什么?我该如何解决?

仅供参考,我实际上正在尝试使用.ToString().split('.')[0..2] -join '.',但我很确定这.ToString是导致问题的原因


function Get-IPAddress{
(Get-WmiObject Win32_NetworkAdapterConfiguration |
    Where { $_.IPAddress } |
Select -Expand IPAddress).split('.')[0..2] -join '.'
}
Get-IPAddress

在 PoSh 3 上返回192.168.10。这似乎在 PoSh 2 上不起作用,并返回我上面所说的“System.Object []”。该错误抱怨没有名为 trim 的方法。其他人建议将其声明为字符串,但我无法使其工作

4

4 回答 4

1

试试这个:

(Get-WmiObject Win32_NetworkAdapterConfiguration | 
? { $_.IPAddress } ).ipaddress | % { ($_ -split '\.')[0..2]}

这:

(Get-WmiObject Win32_NetworkAdapterConfiguration | ? { $_.IPAddress } ).ipaddress 

在单个 ip 地址array of strings的情况下也总是返回一个。

于 2012-11-26T12:14:52.727 回答
0

它不起作用的原因是 IPAddress 属性是 PropertySet 的一部分,控制台输出使它看起来像一个字符串,但它不是

不完全确定您对最终结果的要求,但您可以尝试

(Get-WmiObject Win32_NetworkAdapterConfiguration | %{ $_.IPAddress }) -join " "
于 2012-11-23T10:01:08.607 回答
0

正如 Christian 所提到的, $_.IPAddress 属性是一个字符串数组。

Get-WmiObject Win32_NetworkAdapterConfiguration | % { 
    if($_.IPAddress){
        $_.IPAddress[0]
    }
}

使用您的字符串操作:

$ip = Get-WmiObject Win32_NetworkAdapterConfiguration | % { if($_.IPAddress){$_.IPAddress[0] }}
$ip.ToString().split('.')[0..2] -join '.'

10.15.0

作为一个单行:

(Get-WmiObject Win32_NetworkAdapterConfiguration | % { if($_.IPAddress){$_.IPAddress[0] }}).ToString().split('.')[0..2] -join '.'
于 2012-11-26T14:56:10.593 回答
0

toString导致问题。

你需要管道“out-string”

tostring()您提供定义的类类型为字符串

于 2017-05-15T12:36:25.730 回答