在变量Powershell中传递参数

时间:2018-05-17 17:35:34

标签: powershell

我正在尝试停用" Email Apps" Azure admin center上的功能,用于登机脚本。我不确定是否可以将一些参数传递到foreach循环,下面是代码。我已经定义了param并且没有定义param的代码。

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

我得到的错误是 -

  

无法找到接受参数的位置参数   ' -OWAEnabled&#39 ;.       + CategoryInfo:InvalidArgument:(:) [Set-CASMailbox],ParameterBindingException       + FullyQualifiedErrorId:PositionalParameterNotFound,Set-CASMailbox       + PSComputerName:outlook.office365.com

2 个答案:

答案 0 :(得分:3)

我认为您可能正在寻找的是splatting

如果您在哈希表中定义参数,则可以在将@用作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

答案 1 :(得分:0)

param([bool]$CASMailboxParams, [string]$User)
$User = "Sahand.Test"
$CASMailboxParams = @{
    OWAEnabled = $False
    EwsEnabled = $False
    PopEnabled = $False
}
        Set-CASMailbox -Identity $User @CASMailboxParams
        Get-CASMailbox $User                

这将允许您通过命令传递参数,并在最后检查casmailbox。注意:此脚本适用于Exchange Powershell。