捕获文件中的不同流

时间:2015-08-19 09:45:31

标签: powershell

我试图在文件中捕获VerboseError和其他PowerShell脚本流。这是为了监控我的脚本输出。

以下代码可以正常使用:

$LogFile    = 'S:\ScriptLog.log'
$ScriptFile = 'S:\TestieScript.ps1'

powershell -Command $ScriptFile *>&1 > $LogFile

但是,当我尝试在其中一个文件路径中放置一个空格时,它就不再起作用了。我尝试了很多东西,比如双引号,单引号,但没有运气。

为了说明,以下代码不起作用:

$LogFile    = 'S:\ScriptLog.log'
$ScriptFile = 'S:\Testie Script.ps1'

powershell -Command $ScriptFile *>&1 > $LogFile

this thread中的一个人有同样的问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

尝试使用-file参数:

powershell -file $ScriptFile *>&1 > $LogFile

答案 1 :(得分:2)

您尝试在没有正确引用的情况下运行名称包含空格作为命令的文件,因此您很可能在日志中收到如下错误:

  

术语“S:\ Testie”未被识别为cmdlet,函数,脚本文件或可操作程序的名称。

添加正确的引号(和调用运算符&,因为您的路径现在是一个字符串):

powershell -Command "& '$ScriptFile'" *>&1 > $LogFile

或(更好)使用-File参数,如@CB.已建议:

powershell -File $ScriptFile *>&1 > $LogFile

还有一个额外的好处,即调用将返回脚本的实际退出代码。

编辑:如果您想将命令作为计划任务运行,则需要使用以下内容:

powershell -Command "& 'S:\Testie Script.ps1' *>&1 > 'S:\ScriptLog.log'; exit $LASTEXITCODE"

因为重定向操作符只在内部 PowerShell进程中工作。