【问题标题】:Run Powershell Cmdlet with various number of parameters使用不同数量的参数运行 Powershell Cmdlet
【发布时间】:2019-07-12 23:57:58
【问题描述】:

我正在编写一些 Azure 分析服务配置的脚本,更具体地说是防火墙。 cmdlet

New-AzAnalysisServicesFirewallConfig -FirewallRule

接受创建的规则作为参数;以$rule1 为例。

我希望脚本能够为该命令采用不同数量的参数。而不必像示例中的 6 条规则那样将其硬编码为 X 条规则。

我尝试创建一个包含 X 个参数的 Array 和一个 Hashtable,但无法转换它们。

$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”。

【问题讨论】:

  • 您似乎需要创建这些规则类型的列表。该代码类似于$Rules = @() -as [System.Collections.Generic.List[Microsoft.Azure.Commands.AnalysisServices.Models.PsAzureAnalysisServicesFirewallRule]。然后使用$Rules.Add($rule1) 将$rule1 添加到列表中。

标签: azure powershell


【解决方案1】:

这是未经测试的,因此是理论上的,但如果可以强制转换类型,这应该可以解决该错误。

$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

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 2010-12-05
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2018-02-17
    • 2019-02-01
    相关资源
    最近更新 更多