使用各种参数运行Powershell Cmdlet

时间:2019-07-12 13:51:17

标签: azure powershell

我正在编写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”。

1 个答案:

答案 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