PowerShell中Set-CASMailbox参数传递错误问题求助
解决Set-CASMailbox循环设置参数时的位置参数错误问题
你的问题出在没有以命名参数的方式传递CAS邮箱的配置项,PowerShell把你循环里的参数名(比如OWAEnabled)当成了位置参数值,而不是要设置的参数本身,所以抛出了位置参数找不到的错误。
正确的实现方式(推荐使用Splatting)
Splatting是PowerShell里处理动态参数的安全方式,我们可以构建一个哈希表,动态添加要设置的参数和对应的值:
param( [parameter]$DisableApps ) $DisableApps = ("OWAEnabled" , "EwsEnabled" , "PopEnabled") $mailboxIdentity = "Sahand.Test" foreach ($paramName in $DisableApps) { # 构建参数哈希表,先固定Identity参数 $casParams = @{ Identity = $mailboxIdentity } # 动态添加要禁用的功能参数 $casParams[$paramName] = $false # 使用Splatting传递参数给Set-CASMailbox Set-CASMailbox @casParams }
另一种简化写法(直接动态指定命名参数)
如果你想更简洁,也可以用&操作符结合参数数组来实现,但Splatting可读性更强:
param( [parameter]$DisableApps ) $DisableApps = ("OWAEnabled" , "EwsEnabled" , "PopEnabled") foreach ($paramName in $DisableApps) { & Set-CASMailbox "Sahand.Test" "-$paramName" $false }
错误原因解释
你原来的代码执行时,循环里的命令会变成:
Set-CASMailbox "Sahand.Test" "OWAEnabled" $false
这里的"OWAEnabled"被PowerShell当成了第二个位置参数,但Set-CASMailbox并没有接受这个值的位置参数定义,所以才会报错A positional parameter cannot be found that accepts argument '-OWAEnabled'(实际是解析时把字符串识别成了错误的参数形式)。
内容的提问来源于stack exchange,提问作者DasGG
相关产品推荐
相关产品推荐

