我正在编写Azure Analysis Service的一些配置脚本,更具体地说是防火墙。 cmdlet
New-AzAnalysisServicesFirewallConfig -FirewallRule
接受作为参数创建的规则;以$rule1
为例。
我希望脚本能够对该命令采用不同数量的参数。无需像示例中的6条规则那样将其硬编码为X条规则。
我试图创建一个包含X个参数的数组和哈希表,但是无法将它们转换。
$FirewallRules | ForEach-Object {
$ruleNumberVar = "rule" + "$ruleNumberIndex"
if (!($_.FirewallRuleName -match "$ExistingFirewallRuleName")) {
$start = $_.RangeStart
$end = $_.RangeEnd
$tempRule = New-AzAnalysisServicesFirewallRule `
-FirewallRuleName $_.FirewallRuleName `
-RangeStart $start `
-RangeEnd $end
Set-Variable -Name "$ruleNumberVar" -Value $tempRule
$ruleNumberIndex = $ruleNumberIndex + 1
}
$conf = New-AzAnalysisServicesFirewallConfig -FirewallRule $rule1,$rule2,$rule3,$rule4,$rule5,$rule6
出现此错误:
New-AzAnalysisServicesFirewallConfig:无法绑定参数“ FirewallRule”。无法转换类型为“ System.Collectio”的“ System.Collections.Hashtable”值 ns.Hashtable”键入“ Microsoft.Azure.Commands.AnalysisServices.Models.PsAzure AnalysisServicesFirewallRule”。
答案 0 :(得分:0)
这是未经测试的,因此是理论上的,但是如果可以转换类型,这应该可以解决该错误。
$Rules = @() -as [System.Collections.Generic.List[Microsoft.Azure.Commands.AnalysisServices.Models.PsAzureAnalysisServicesFirewallRule]]
$FirewallRules | ForEach-Object {
$ruleNumberVar = "rule" + "$ruleNumberIndex"
if (!($_.FirewallRuleName -match "$ExistingFirewallRuleName")) {
$start = $_.RangeStart
$end = $_.RangeEnd
$tempRule = New-AzAnalysisServicesFirewallRule `
-FirewallRuleName $_.FirewallRuleName `
-RangeStart $start `
-RangeEnd $end
Set-Variable -Name $ruleNumberVar -Value $tempRule
$Rules.Add((Get-Variable $ruleNumberVar -ValueOnly))
$ruleNumberIndex = $ruleNumberIndex + 1
}
}
$conf = New-AzAnalysisServicesFirewallConfig -FirewallRule $Rules