2012-04-16 6 views
7

ich diese Nachricht jedes Mal mein Skript nicht ordnungsgemäß beenden und Stop-Transkript nicht ausgeführt wird:Powershell - wie überprüft man, ob das Transkript läuft?

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 

Ist es möglich, Transkript zu überprüfen, ob ausgeführt wird und es stoppen mit if-then beim Start des Skripts ? Oder wie man es am Ende zuverlässig stoppt? Danke

Antwort

7

Wie wäre es mit einem leeren try-catch Block am Anfang Ihres Powershell-Skripts, um das Transkribieren zu stoppen?

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

Dies ist einfach und es funktioniert sofort für mich! Danke – culter

+0

Danke für den Tipp über 'Out-Null'! Es ist eine gute Alternative zu $ ​​null –

2

Probieren Sie die Test Transcribing Funktion finden Sie hier: http://poshcode.org/1500

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

Dies funktioniert nicht in Powershell 4 (vielleicht früher) die Ausnahme muss sich geändert haben. – svandragt

6

Wäre das nicht so etwas wie diese Arbeit?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

Aus der Dokumentation: finally-Block-Anweisungen ausführen, unabhängig davon, ob der Try-Block einen Abschluss Fehler auftritt. Windows PowerShell führt den Finally-Block aus, bevor das Skript beendet wird oder bevor der aktuelle Block den Gültigkeitsbereich verlässt. Ein Finally-Block wird auch dann ausgeführt, wenn Sie CTRL + C verwenden, um das Skript zu stoppen. Ein Finally-Block wird auch ausgeführt, wenn ein Exit-Schlüsselwort das Skript innerhalb eines Catch-Blocks stoppt.

+0

Vielen Dank, dass Sie dieses Cmdlet ausgewählt haben. Ich bin mir ziemlich sicher, dass es in Zukunft helfen wird. – culter

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

Können Sie erläutern, was dieser Code macht? – rayryeng

+1

Da das ursprüngliche Plakat nie beantwortet wurde, werde ich eine Erklärung liefern. 'Start-Transcript' löst einen Fehler aus, wenn es bereits gestartet wurde. Der Code oben versucht zuerst die Transkription zu starten. Wenn die Transkription bereits gestartet wurde, fängt sie den Fehler ab, stoppt die Transkription und startet sie erneut. Dadurch wird sichergestellt, dass die Ausgabe an den durch _ $ myOutLog_ angegebenen Speicherort gesendet wird. Es ist wahrscheinlich besser, den spezifischen Fehler statt aller Fehler zu erfassen. Die}} catch {'-Zeile würde dann zu}} catch [System.InvalidOperationException] {' werden. –