gpt4 book ai didi

powershell - Powershell管道中的错误处理

转载 作者:行者123 更新时间:2023-12-03 00:50:13 26 4
gpt4 key购买 nike

如何在Powershell表达式中捕获(抑制)错误?

我正在尝试使用get-ChildItem遍历目录中的文件并提取一些信息。

get-ChildItem "c:\test\" -Recurse  | % { $_.Name + " ==> " + (try{(([xml] (Get-Content $_.FullName)).DocumentElement.TagName)} catch{"not xml"})  }

我知道我可以重写此代码以不使用管道,并以这种方式捕获错误,但是有可能使它成为一个衬管吗?

上面的返回“try:术语'try'不被识别为cmdlet,函数,脚本文件或可运行程序的名称。
名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。”

最佳答案

如果在Get-Content期间发生错误,请使用-ErrorAction Ignore-ErrorAction SilentlyContinue进行调用。如果在访问Get-Content结果的属性时发生这种情况,那么请使用Select-Object而不是使用点符号,以便可以对每个这些使用-ErrorAction:

get-ChildItem "c:\test\" -Recurse  | % { $_.Name + " ==> " + ((([xml] (Get-Content $_.FullName -ea Ignore)) | Select-Object -ExpandProperty DocumentElement -ea Ignore | Select-Object -ExpandProperty TagName -ea Ignore))  }

您也可以在单线之外的某个地方 use a trap statement,不确定是否仍然算作单线。

我的建议是不要挂断单线的东西。请注意,管道不必是一线的。 %ForEach-Object,您要传递给它的脚本块可以是多行,并包含 try/ catchif语句等。

关于powershell - Powershell管道中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com