如何将错误重定向到变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将错误重定向到变量相关的知识,希望对你有一定的参考价值。
我有一个脚本传递文件,我想将任何错误重定向到一个变量,并在脚本的末尾打印它们。 以下是我遇到的问题的示例:
Get-ChildItem C:Windowsappcompat -Recurse | ForEach-Object {
# do stuff ...
}
有时有些文件夹我无法访问它们并且它会抛出异常:
我知道如何忽略这些错误并继续使用开关-ErrorAction
,但我想收集所有我无法访问的文件夹并在脚本的末尾打印它们。
使用redirection可以使用2>
将错误重定向到文件:
Get-ChildItem C:Windowsappcompat -Recurse 2> errors.txt | ForEach-Object {
# do stuff ...
}
是否可以将错误重定向到变量,然后我将在脚本的末尾打印它们?
答案
您可以使用common -ErrorVariable
parameter在变量中收集cmdlet的错误。
由于除了将错误发送到错误流之外发生此收集,如通常一样,如果您希望收集是静默的,则必须使用2>$null
显式地使错误流输出静音。
因此,为了在变量$errs
中静默收集错误,请使用以下命令:
# Shorter equivalent of `-ErrorVariable errs`: `-ev errs`
Get-ChildItem C:Windowsappcompat -Recurse -ErrorVariable errs 2>$null | ForEach-Object {
# do stuff ...
}
注意:
-ErrorVariable
的短名称是-ev
- 请确保不要使用
$
为目标变量名添加前缀 - 您要传递其名称,而不是其值。 - 不要使用名称
Errors
,因为$Errors
是自动(内置)变量,其中正在收集会话中发生的所有错误。 - 目标变量接收包含
[System.Collections.ArrayList]
实例的[System.Management.Automation.ErrorRecord]
类型的集合。 请注意,即使只发生了一个错误,您也可以获得一个集合,这可能会令人惊讶,因为PowerShell通常会解包单个元素集合;这种令人惊讶的行为在this GitHub issue中讨论过。
不幸的是,这种方便的错误收集机制在调用外部程序时是不可用的(例如,当你调用git
时),因为这种调用不支持通用参数。然而,有一个suggestion on GitHub to introduce an alternative syntax。
以上是关于如何将错误重定向到变量的主要内容,如果未能解决你的问题,请参考以下文章
Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)