2012-04-16 18 views
7

ricevo questo messaggio ogni volta che il mio script non finisce correttamente e stop-trascrizione non viene eseguita:powershell - come controllare se la trascrizione è in esecuzione?

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 

E 'possibile verificare se trascrizione è in funzione e fermarla con if-then all'inizio dello script ? O come fermarlo in modo affidabile alla fine? Grazie

risposta

7

Che dire di un blocco vuoto try-catch all'inizio dello script PowerShell per interrompere la trascrizione?

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

Questo è semplice e funziona immediatamente per me! Grazie – culter

+0

Grazie per il suggerimento su "Out-Null'! È una buona alternativa a '$ null' –

2

Prova la funzione Test-trascrizione disponibile qui: http://poshcode.org/1500

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

Questo non funziona in Powershell 4 (forse prima) l'eccezione deve essere cambiata. – svandragt

6

Non sarebbe qualcosa di simile a questo lavoro?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

Dalla documentazione: Le dichiarazioni Infine bloccare eseguite indipendentemente dal fatto che il blocco Try incontra un errore fatale. Windows PowerShell esegue il blocco Finally prima che lo script termini o prima che il blocco corrente vada fuori ambito. Un blocco finally viene eseguito anche se si utilizza CTRL + C per interrompere la scrittura. Un blocco Finally viene eseguito anche se una parola chiave Exit interrompe lo script da un blocco Catch.

+0

Grazie per aver scelto questo cmdlet. Sono abbastanza sicuro che sarà d'aiuto in futuro. – culter

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

Potete fornire alcune spiegazioni su cosa sta facendo questo codice? – rayryeng

+1

Poiché il poster originale non ha mai risposto, fornirò una spiegazione. 'Start-Transcript' genererà un errore se è già stato avviato. Il codice sopra prima tenta di iniziare la trascrizione. Se la trascrizione è già stata avviata, rileva l'errore, interrompe la trascrizione, quindi la riavvia. Ciò garantisce che l'output sia inviato alla posizione specificata da _ $ myOutLog_. Probabilmente è una pratica migliore per catturare l'errore specifico invece di tutti gli errori. La riga '} catch {' diventerebbe quindi '} catch [System.InvalidOperationException] {'. –

Problemi correlati