You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:14:56