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 192.168.102 では動作しないようで、前述の「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

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

機能しない理由は、IPAddress プロパティが PropertySet の一部であるためです。コンソール出力では文字列のように見えますが、そうではありません

最終結果に何が必要か完全にはわかりませんが、試すことができます

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