简体   繁体   中英

Run Powershell Cmdlet with various number of parameters

I'm scripting some configuration of Azure Analysis Service, and more specifically the firewall. The cmdlet

New-AzAnalysisServicesFirewallConfig -FirewallRule

takes in the rules created as a parameter; $rule1 as an example.

I want the script to be able to take a varying number of parameters to that command. Instead of having to hardcode it to X number of rules like in the example with 6 rules.

I tried to create an Array and a Hashtable containing the X number of parameters, but it's unable to convert them.

$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

Getting this error:

New-AzAnalysisServicesFirewallConfig : Cannot bind parameter 'FirewallRule'. Cannot convert the "System.Collections.Hashtable" value of type "System.Collectio ns.Hashtable" to type "Microsoft.Azure.Commands.AnalysisServices.Models.PsAzure AnalysisServicesFirewallRule".

This is untested and therefore theoretical, but this should fix that error if the type can be casted.

$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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM