如何解决Powershell cmdlet忽略数组参数
我正在尝试使用PowerShell cmdlet在Azure云中创建资源:
$Gateway = New-AzApplicationGateway `
-Name $GatewayName `
-ResourceGroupName $ResourceGroupName `
-Location $Location `
-Sku $GatewaySku `
-GatewayIPConfigurations $GatewayIPconfig `
-FrontendIPConfigurations $FrontendIpConfig `
-FrontendPorts $FrontEndPort `
-Probes $HealthProbe `
-BackendAddresspools $PlatformBackendPool,$ApiBackendPool `
-BackendHttpSettingsCollection $PoolSettings `
-Force
但是,此结尾为:
cmdlet New-AzApplicationGateway at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
GatewayIPConfigurations[0]:
$GatewayIPconfig.GetType()
产生
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False PSApplicationGatewayIPConfiguration Microsoft.Azure.Commands.Network.Models.PSChildResource
和cmdlet的documentation指出签名为
New-AzApplicationGateway
...
-GatewayIPConfigurations <PSApplicationGatewayIPConfiguration[]>
...
这不是将数组参数传递给cmdlet的正确方法吗?
解决方法
这只是一个猜测,但是您可能在-Sku $GatewaySku '
之后有一个空格或制表符吗?这可能完全产生您描述的行为。基本上可以解释为:
$Gateway = New-AzApplicationGateway `
-Name $GatewayName `
-ResourceGroupName $ResourceGroupName `
-Location $Location `
-Sku $GatewaySku
# (the rest of the arguments will be missing)
以这种方式使用反引号时,这是一个常见的陷阱。通常建议不要这样做。这是因为反引号不是延续,而是 escape 字符,因此之后的所有都将被转义。当您按需使用它时,会使用换行符,因此可以将参数放在单独的行上,但是如果中间还有其他空格,则会中断。
最佳做法是将所有内容都写在一行中,或者如果有太多的参数使其难以阅读,则可以使用splatting:
$params = @{
Name = $GatewayName
ResourceGroupName = $ResourceGroupName
Location = $Location
Sku = $GatewaySku
GatewayIPConfigurations = $GatewayIPconfig
FrontendIPConfigurations = $FrontendIpConfig
FrontendPorts = $FrontEndPort
Probes = $HealthProbe
BackendAddressPools = $PlatformBackendPool,$ApiBackendPool
BackendHttpSettingsCollection = $PoolSettings
Force = $true
}
$Gateway = New-AzApplicationGateway @params
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。