我正在尝试以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...>
}
}
Run Code Online (Sandbox Code Playgroud)
在成功和失败时,一切都按预期工作......但是在测试运行期间,在尝试将PrimarySMTPAddress更改为无效值时,我得到一个警告(而不是错误),即新电子邮件地址不符合e-邮件地址政策,所以不会改变.但由于这是一个警告,try
/ catch
不会触发,整个过程错误地完成成功.
我试过了:
-WarningAction Stop
到命令并确实触发try/catch,但错误太通用了:
命令执行已停止,因为首选项变量"WarningPreference"或common参数设置为Stop.
所以我试图捕获变量和文件的警告(以便在报告成功或失败时检查以后),但我尝试捕获的所有方法都失败了,即使它不断向屏幕显示警告.
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
Run Code Online (Sandbox Code Playgroud)
但是文件和变量总是空的,我做错了什么或错过了什么?
您声明您正在使用,它创建一个带有代理函数Import-PSSession
的(内存中)模块,这些代理函数透明地调用远程计算机上的同名命令,这一概念称为隐式远程处理。
不幸的是,从 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
Run Code Online (Sandbox Code Playgroud)
请注意,Invoke-Command
此处的调用本身并不执行远程处理;而是执行远程处理。它只是一个本地调用包装器,使-WarningVariable
公共参数在应用于它时起作用。
归档时间: |
|
查看次数: |
145 次 |
最近记录: |