.ToString在Error中返回System.Object []

时间:2012-11-22 13:22:00

标签: powershell-v2.0

如果我在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的方法。其他人建议将其声明为String,但我无法使其正常工作

4 个答案:

答案 0 :(得分:1)

试试这个:

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

此:

(Get-WmiObject Win32_NetworkAdapterConfiguration | ? { $_.IPAddress } ).ipaddress 
对于单个IP地址

也始终返回array of strings

答案 1 :(得分:0)

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

不完全确定您的最终结果需要什么,但您可以尝试

(Get-WmiObject Win32_NetworkAdapterConfiguration | %{ $_.IPAddress }) -join " "

答案 2 :(得分: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 '.'

答案 3 :(得分:0)

toString导致问题。

你需要管道&#34; out-string&#34;

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