首先,让我从我想要实现的目标开始。
我正在编写一个内部调用Get-AdUser的PowerShell脚本模块(简称为Get-FdkUser),并应重试几次,以防抛出证书异常。当然,由于正在重试,因此不应记录该错误-如果重试不起作用,则仅是错误。 此PowerShell脚本模块用作脚本的一部分,以通过超过100,000个用户。除了AD数据,我还将从Exchange和AzureAD提取数据。
在执行重试之前,我通过检查$ Error变量来记录任何类型的错误。基本上是这样
$Error.clear()
Get-ADUser
Get-Mailbox
Get-AzureADUser
if($Error.Count -gt 0) {
Do something
}
像魅力一样工作。
现在,我的问题...
1)在PowerShell脚本模块中,似乎未填充$ Error变量。仅在执行Commandlet之后才填充它。 您可以通过检查以下代码来复制它。 即使没有我的要求,我也觉得很奇怪。看来我永远无法在PowerShell脚本模块中使用$ Error变量?
文件:ErrorTest.psm1
function Get-FdkTest
{
[CmdletBinding()]
Param
()
try {
$temp[-1]
} catch {
Write-Host "there was an error"
}
Write-Host "Commandlet error count $($Error.Count)"
}
Export-ModuleMember -Function *
脚本
Import-Module .\ErrorTest.psm1 -Force
$Error.Clear()
Get-FdkTest
"Error count outside of commandlet $($Error.Count)"
输出
there was an error
Commandlet error count 0
Error count outside of commandlet 1
2)如前所述,重试可以解决的异常甚至不应该出现。理想情况下,我想将它们从$ Error变量中删除,或者避免捕获它们。除了由于1)仍然无法正常工作外,也许还有更好的方法来解决这个问题。
最后,这是我正在运行的PowerShell版本。
Name Value
---- -----
PSVersion 5.1.15063.1029
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.15063.1029
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1