powershell - Powershell 脚本模块/命令行开关中的 $Error 变量
问题描述
首先,让我从我想要实现的目标开始。
我正在编写一个 PowerShell 脚本模块(我们称之为 Get-FdkUser),它在内部调用 Get-AdUser,并且应该重试几次,以防引发除 certian Exception 之外的所有异常。当然,因为它正在重试,所以不应该记录错误——如果重试不起作用,它只是一个错误。此 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 变量。它仅在执行命令行开关后填充。您可以通过检查以下代码来复制它。即使没有我的要求,我也觉得这很奇怪。看来我永远不能在 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
解决方案
推荐阅读
- asp.net-core-mvc - SignOut 不会重定向到站点主页
- plot - 使用gnuplot绘制二进制数据时是否可以设置X轴时间范围?
- reactjs - 为什么我无法访问 Docker 中的 React 应用程序?
- reactjs - 在反应中更改状态数组索引处的样式对象
- python - Python 项目欧拉 #21
- opc - 将 ClientName 设置为 OPC Server
- sql - 如何在每条记录中创建唯一的哈希字节值
- maven - Maven 排除未按预期工作的资源
- python-3.x - 将 Byte 类型的属性隐式转换为 String
- c - sprintf 没有以正确的方式复制