Powershell を使用して Web サーバーで IIS バインディングをセットアップしていますが、次のコードに問題があります。
$serverIps = gwmi Win32_NetworkAdapterConfiguration
| Where { $_.IPAddress }
| Select -Expand IPAddress
| Where { $_ -like '*.*.*.*' }
| Sort
if ($serverIps.length -le 1) {
Write-Host "You need at least 2 IP addresses for this to work!"
exit
}
$primaryIp = $serverIps[0]
$secondaryIp = $serverIps[1]
サーバーに 2 つ以上の IP がある場合は問題ありません。Powershell は配列を返します。配列の長さを照会して、最初と 2 番目のアドレスを問題なく抽出できます。
問題は-IPが1つしかない場合、Powershellは1要素の配列を返さず、IPアドレスを返します(「192.168.0.100」のような文字列として)-文字列には.length
プロパティがあり、1より大きいため、テストに合格すると、コレクション内の最初の 2 つの IP アドレスではなく、文字列内の最初の 2 文字が得られます。
Powershell に 1 要素のコレクションを返すように強制する方法、または返された「もの」がコレクションではなくオブジェクトであるかどうかを判断するにはどうすればよいですか?