我有一个PowerShell脚本,它是Windows Sandbox的启动脚本,因此它以静默方式运行。
是否可以在PowerShell脚本中放置某种声明,比如在脚本的开头,告诉静默运行的脚本将其所有错误输出到一个文本文件中?
编辑(Fitzgery的评论):我不可能对脚本使用重定向,因为它是作为Windows沙盒启动的一部分静默运行的。我希望在脚本本身中有一些东西来指示运行的脚本将所有错误输出到文本文件中。
我有一个PowerShell脚本,它是Windows Sandbox的启动脚本,因此它以静默方式运行。
是否可以在PowerShell脚本中放置某种声明,比如在脚本的开头,告诉静默运行的脚本将其所有错误输出到一个文本文件中?
编辑(Fitzgery的评论):我不可能对脚本使用重定向,因为它是作为Windows沙盒启动的一部分静默运行的。我希望在脚本本身中有一些东西来指示运行的脚本将所有错误输出到文本文件中。
1条答案
按热度按时间bwleehnv1#
尝试执行以下操作,因为会话中发生的所有错误都会记录在自动
$Error
变量中:注意事项:
try
语句有副作用:finally
子句;也就是说,语句-终止错误并不常见**,当它们发生时(意外地)中止执行是有争议的。try
语句并简单地将$Error > errors.txt
放在脚本的末尾,(非终止AND)语句-终止错误将照常处理,但如果发生SCRIPT-终止错误,$Error > errors.txt
语句将永远不会执行。使用
trap
的替代解决方案无副作用只有在您知道您的脚本不会产生脚本*-终止错误的情况下:脚本-终止错误是显式使用
throw
创建的错误,或者隐式*通过-ErrorAction Stop
或$ErrorActionPreference = 'Stop'
创建的错误trap
语句允许您在不停止执行的情况下对错误执行操作,即如果您不在您传递给它的脚本块中使用break
。因此,尽管它在非终止和语句-终止错误之后继续,就像在正常执行期间一样,但它也在脚本-终止错误之后继续。
使用
Start-Transcript
:Start-Transcript
是一种捕获所有脚本输出的方式,而不仅仅是*错误(即记录来自PowerShell的所有output streams的输出,特别包括成功输出(数据)-您别无选择*)。Stop-Transcript
配对才能关闭成绩单文件。Stop-Transcript
,则脚本将保持打开状态,并在剩余的会话中继续记录。Stop-Transcript
被称为**,您面临着与上面相同的权衡:try
语句的finally
块中调用它可能会过早中止执行。break
的trap
语句可能不会在应该停止执行时停止执行。-File
的CLI调用中-不调用Stop-Transcript
将不是问题**,并确保无副作用的日志记录-尽管如上所述,它总是包括所有脚本的输出。