当调用只返回一个对象时,如何强制Powershell返回数组?

我使用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返回一个数组,我可以查询数组长度,提取第一和第二个地址很好。

问题是 – 如果只有一个IP,Powershell不返回一个单元素数组,它返回IP地址(作为字符串,如“192.168.0.100”) – 该字符串具有.length属性,它大于1 ,所以测试通过,我结束了字符串中的前两个字符,而不是集合中的前两个IP地址。

如何强制Powershell返回单元素集合,或者确定返回的“东西”是否是一个对象而不是一个集合?

最佳答案
使用以下两种方法之一将变量定义为数组…

将括号中的命令括在括号中,开头带有@:

$serverIps = @(gwmi Win32_NetworkAdapterConfiguration 
    | Where { $_.IPAddress } 
    | Select -Expand IPAddress 
    | Where { $_ -like '*.*.*.*' } 
    | Sort)

将变量的数据类型指定为数组:

[array]$serverIps = gwmi Win32_NetworkAdapterConfiguration 
    | Where { $_.IPAddress } 
    | Select -Expand IPAddress 
    | Where { $_ -like '*.*.*.*' } 
    | Sort

或者,检查变量的数据类型…

IF ($ServerIps -isnot [array])
{ <error message> }
ELSE
{ <proceed> }

转载注明原文:当调用只返回一个对象时,如何强制Powershell返回数组? - 代码日志