问题
使用-ErrorAction "SilentlyContinue"
时,错误变量未按照以下文档中的说明进行填充:以 PowerShell 方式处理错误。
问题
如何防止错误按原样显示-ErrorAction "Continue"
但仍填充错误变量?
奖金问题
有没有办法将错误附加到错误变量以存储多个错误?
MWE
脚本
$ErrorActions = @("Continue", "SilentlyContinue", "Stop")
foreach ($ErrorAction in $ErrorActions) {
Write-Host -Object $ErrorAction -ForegroundColor "Green"
Get-Item -Path "C:\tmp\error1" -ErrorAction $ErrorAction -ErrorVariable "ErrorMessage"
Get-Item -Path "C:\tmp\error2" -ErrorAction $ErrorAction -ErrorVariable "ErrorMessage"
Write-Host -Object "ErrorVariable" -ForegroundColor "Yellow"
$ErrorMessage
}
输出
继续
Get-Item:找不到路径“C:\tmp\error1”,因为它不存在。
在 C:\tmp\mwe.ps1:43 字符:5
Get-Item -Path "C:\tmp\error1" -ErrorAction $ErrorAction -ErrorVa ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (C:\tmp\error1:String) [Get-Item], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand
Get-Item:找不到路径“C:\tmp\error2”,因为它不存在。
在 C:\tmp\mwe.ps1:44 字符:5
Get-Item -Path "C:\tmp\error2" -ErrorAction $ErrorAction -ErrorVa ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (C:\tmp\error2:String) [Get-Item], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand
误差变量
Get-Item:找不到路径“C:\tmp\error2”,因为它不存在。
在 C:\tmp\mwe.ps1:44 字符:5
Get-Item -Path "C:\tmp\error2" -ErrorAction $ErrorAction -ErrorVa ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (C:\tmp\error2:String) [Get-Item], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand
默默地继续
误差变量
停止
Get-Item:找不到路径“C:\tmp\error1”,因为它不存在。
在 C:\tmp\mwe.ps1:43 字符:5
Get-Item -Path "C:\tmp\error1" -ErrorAction $ErrorAction -ErrorVa ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : ObjectNotFound: (C:\tmp\error1:String) [Get-Item], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemCommand