小编典典

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

all

我正在使用 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 返回单元素集合,或者确定返回的“事物”是否是对象而不是集合?


阅读 67

收藏
2022-08-27

共1个答案

小编典典

以两种方式之一将变量定义为数组…

将您的管道命令包装在括号中,@并在开头使用 a:

$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> }
2022-08-27