我会这样做。
- 根据需要设置多个
Try/Catch block。
- 尽可能将多个 cmdlet 调用分组到同一块下。正如您所提到的,我们不想将所有内容归为 1 个巨大的
try/catch 块,但仍然可以将相关调用放在一起。
- 将您的模块内函数设计为高级函数,这样您就可以使用常用参数,例如...
-ErrorAction
- 设置
$PSDefaultParameterValues = @{'*:ErrorAction'='Stop'},这样所有支持-ErrorAction 的cmdlet 都不会落入try/catch 块。
(您也可以在任何地方手动设置-ErrorAction Stop,但由于您希望将其设为默认值,因此这样做是有意义的。在任何情况下,您都不想触摸$ErrorActionPreference,因为它具有全局范围amd如果您在模块范围之外更改默认值,您的用户将不会喜欢您。)
您还可以将错误流重定向到文件,这样它就不会出现在输出中,而是写入文件中。
这是一个独立的例子:
& {
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 2>> 'C:\Temp\redirection.log'
有关更多信息,请参阅:About_Redirection。
(现在我想知道您是否可以将流重定向到文件以外的其他内容
补充说明
外部模块也可以帮助记录日志,并且可能提供更简化的方法。
不过,我对他们中的任何一个都不熟悉。
我知道PSFramework 有一些关于日志记录的有趣内容。
您可以查看并进行试验,看看是否符合您的需求。
否则,您可以对 PSGallery 进行日志记录模块的研究
(这项研究远非完美,但有些候选人可能很有趣)
find-module *logging* | Select Name, Description, PublishedDate,Projecturi | Sort PublishedDate -Descending