Exchange Online脚本执行New-Mailbox命令时无法识别-Equipment参数问题
搞定Exchange Online脚本里New-Mailbox的参数问题
嘿,我知道你现在头疼的点:手动敲命令New-Mailbox -Name "XXX" -Equipment没问题,但放到脚本里用变量-$($Type)传参数就报错,提示找不到接受"-Equipment"的位置参数。这事儿我遇过,给你掰扯清楚原因和解决办法:
为啥会报错?
PowerShell可不会聪明到把变量里的字符串(比如"-Equipment")直接当成参数名来认。当你写New-Mailbox -Name "$($Resource)" -$($Type)的时候,它会把-$($Type)当成一个叫-$Type的奇怪参数,而不是你想要的-Equipment——Exchange的cmdlet根本没这个参数,可不就报错嘛!
靠谱的解决办法
推荐用PowerShell的参数拼接(Splatting),这是最规范安全的方式,比瞎拼字符串靠谱多了:
方法1:哈希表参数拼接(首选)
# 先建个哈希表存固定参数 $mailboxSettings = @{ Name = $Resource } # 根据你的Type变量,往哈希表里加对应的参数 if ($Type -eq "Equipment") { $mailboxSettings["Equipment"] = $true } elseif ($Type -eq "Room") { $mailboxSettings["Room"] = $true } # 用@符号把哈希表传给命令,完美识别参数 New-Mailbox @mailboxSettings
方法2:字符串拼接执行(谨慎用)
如果你的场景很简单,也可以把命令拼成字符串再执行,但要注意:如果$Resource或者$Type是用户输入的内容,这种方式有安全风险,容易被注入恶意命令。代码大概是这样:
$cmd = "New-Mailbox -Name '$Resource' -$Type" Invoke-Expression $cmd
再啰嗦两句验证逻辑
手动敲命令正常,是因为PowerShell直接把-Equipment当成了内置参数;但脚本里用变量传参数名时,必须用上面的方法让PowerShell正确“读懂”你的参数名,而不是把它当成普通字符串。
内容的提问来源于stack exchange,提问作者Patrik Persson
相关产品推荐
相关产品推荐

