我试图在文件中捕获Verbose
,Error
和其他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中的一个人有同样的问题。
感谢您的帮助。
答案 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进程中工作。