首页 > 解决方案 > 在变量 Powershell 中传递参数

问题描述

我正在尝试为离线脚本禁用“ Email Apps”功能。Azure admin center我不确定是否可以将一些参数传递到foreach循环中,下面是代码。我已经运行了定义了参数但没有定义参数的代码。

param(
  [parameter]$DisableApps
)
$DisableApps = ("OWAEnabled" , "EwsEnabled" , "PopEnabled")
foreach ($i in $DisableApps){Set-CASMailbox "Sahand.Test" $i $false}

我得到的错误是 -

找不到接受参数“-OWAEnabled”的位置参数。+ CategoryInfo:InvalidArgument:(:) [Set-CASMailbox],ParameterBindingException + FullyQualifiedErrorId:PositionalParameterNotFound,Set-CASMailbox + PSComputerName:outlook.office365.com

标签: powershell

解决方案


我认为您可能正在寻找的是所谓的飞溅

如果您在哈希表中定义参数,则可以在@用作 splat 运算符时将它们作为参数传递。(请注意,@除了作为 splat 运算符之外,它还有其他用途。)

param(
    [string]$Identity = "Sahand.Test",
    [switch]$DisableApps 
)
If ($DisableApps) {
    $CASMailboxParams = @{
        Identity =  $Identity
        OWAEnabled = $False
        EwsEnabled = $False
        PopEnabled = $False
    }
    Set-CASMailbox @CASMailboxParams
} else {
    Set-CASMailbox $Identity
}

然后通过使用您的脚本参数,您可以使用-DisableApps将这些参数设置为 false。

.\examplescript.ps1 -Identity 'differentuser' -DisableApps

推荐阅读