在变量 Powershell 中传递参数



我正在尝试禁用Azure admin center上的"Email Apps"功能以进行卸载脚本。我不确定我是否可以将一些参数传递到foreach循环中,下面是代码。我已经运行了定义参数和未定义参数的代码。

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

我得到的错误是 -

找不到接受参数的位置参数 "-OWAEnabled"。 + CategoryInfo : InvalidArgument: (:) [Set-CASMailbox], ParameterBindingException + FullQualifiedErrorId : PositionalParameterNotFound,Set-CASMailbox + PSComputer名称 : outlook.office365.com

我认为您可能正在寻找的称为喷溅

如果在哈希表中定义参数,则可以在将@用作 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
param([bool]$CASMailboxParams, [string]$User)
$User = "Sahand.Test"
$CASMailboxParams = @{
OWAEnabled = $False
EwsEnabled = $False
PopEnabled = $False
}
Set-CASMailbox -Identity $User @CASMailboxParams
Get-CASMailbox $User                

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

最新更新