2012-04-16 204 views
7

我得到这个消息,每次我的脚本不正确结束和停止成绩单不执行:powershell - 如何检查成绩单是否正在运行?

Start-Transcript : Transcription has already been started. Use the stop-transcr 
ipt command to stop transcription. 
At C:\ps\003desifrovanie.ps1:4 char:17 
+ start-transcript <<<< -path c:\_LOG\sfrbdesifrovanie.log -append 
+ CategoryInfo   : NotSpecified: (:) [Start-Transcript], InvalidOpe 
rationException 
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power 
Shell.Commands.StartTranscriptCommand 

是否可以检查是否成绩单运行和停止它的if-then在脚本的开始?或者如何在最后可靠地阻止它?谢谢

回答

7

那么你的PowerShell脚本开始处的一个空的try-catch块如何停止转录呢?

try{ 
    stop-transcript|out-null 
} 
catch [System.InvalidOperationException]{} 
+0

这很简单,它适用于我!谢谢 – culter 2012-04-16 08:52:20

+0

感谢关于'Out-Null'的提示!这是'$ null'的好替代方案 – 2012-06-25 22:32:45

2

尝试这里提供的试验录制功能:http://poshcode.org/1500

if(Test-Transcribing) {Stop-Transcript} 
+0

这不适用于Powershell 4(也许更早),例外必须更改。 – svandragt 2014-08-22 12:47:53

6

岂不像这样的工作?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

从文档: finally块语句无论try块是否遇到终止错误运行。 Windows PowerShell在脚本终止之前或当前块超出范围之前运行Finally块。即使您使用CTRL + C停止脚本,如果Exit关键字停止Catch块内的脚本,则还会运行Finally块。

+0

感谢您选择此cmdlet。我很确定它将在未来有所帮助。 – culter 2012-04-16 11:18:21

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

你能否提供一些关于这段代码在做什么的解释? – rayryeng 2014-12-01 18:29:30

+1

由于原始海报从未回答过,我会提供解释。如果Start-Transcript已经启动,将会抛出一个错误。上面的代码首先尝试开始转录。如果转录已经开始,它会捕获错误,停止转录,然后再次启动。这确保输出被发送到由_ $ myOutLog_指定的位置。尽管抓住特定的错误而不是所有的错误可能是更好的做法。然后'} catch {'行会变成'} catch [System.InvalidOperationException] {'。 – 2015-09-23 15:53:56

相关问题