Powershell脚本模块/ Commandlet中的$ Error变量

时间:2018-06-22 14:37:11

标签: powershell error-handling module powershell-v5.0

首先,让我从我想要实现的目标开始。

我正在编写一个内部调用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

0 个答案:

没有答案