我正在尝试通过以下方式使用Set-DistributionGroup
Exchange cmdlet:
$Exch_Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $ExchangeURI -Authentication Kerberos
Import-PSSession $Exch_Session -commandname Set-DistributionGroup -AllowClobber
if (<condition>) {
try {
Set-DistributionGroup @Setparams
}
catch {
<error capture code here...>
}
}
关于成功和失败,一切都按预期进行...但是在测试运行期间,尝试将PrimarySMTPAddress更改为无效值时,我收到警告(不是错误),该新电子邮件地址不符合电子邮件地址策略,因此不会更改。但是由于这是一个警告,所以try
/ catch
不会触发,并且整个过程会错误地成功完成。
我尝试过:
-WarningAction Stop
并触发try / catch,但是错误过于笼统:
由于首选项变量“ WarningPreference”或公共参数设置为“停止”,因此命令执行停止。
因此,我尝试将警告捕获到变量以及文件中(以在以后报告成功或失败时进行检查),但是我尝试捕获的所有方法均失败了,即使它不断向计算机显示警告。屏幕。
Set-Distributiongroup @Setparams -WarningVariable cmd_warn
Set-Distributiongroup @Setparams 3> c:\temp\warnings.txt
...
$command = "Set-Distributiongroup @Setparams"
iex $command 3> c:\temp\warnings.txt
但是文件和变量始终为空,我在做什么错还是错过了?
答案 0 :(得分:4)
您声明您正在使用 Import-PSSession
,它会创建一个具有 proxy函数的(内存中)模块,该模块透明地调用以下命令。在远程计算机上的相同名称,称为“ 隐式远程处理 ”。
不幸的是,从Windows PowerShell v5.1 / PowerShell Core 6.2.0-preview.4开始,此功能的实现在首选项变量,通用参数和输出流。
在您的特定情况下,请尝试以下解决方法:
Invoke-Command { Set-Distributiongroup @Setparams } -WarningVariable cmd_warn
if ($cmd_warn) { ... } # warning was emitted
请注意,此处的Invoke-Command
调用本身并不执行远程处理;仅仅是一个 local 调用包装器,当将-WarningVariable
公用参数应用于 it 时,该参数就起作用。