如果我在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,但我无法使其正常工作
答案 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()
为您提供了类定义为字符串的类型