2012-04-16 23 views
7

me sale este mensaje cada vez que mi guión no termina correctamente y detener-transcripción no se ejecuta:powershell: ¿cómo comprobar si se está ejecutando la transcripción?

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 

¿Es posible comprobar si se está ejecutando la transcripción y detenerlo con si-entonces al comienzo de la secuencia de comandos ? ¿O cómo detenerlo de manera confiable al final? Gracias

Respuesta

7

¿Qué tal un bloque vacío try-catch al comienzo de su script de powershell para detener la transcripción?

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

¡Esto es simple y funciona inmediatamente para mí! Gracias – culter

+0

Gracias por el consejo sobre 'Out-Null'! Es una buena alternativa a '$ null' –

2

Pruebe la función Test-Transcripción disponible aquí: http://poshcode.org/1500

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

Esto no funciona en Powershell 4 (quizás antes) la excepción debe haber cambiado. – svandragt

6

¿No sería algo así como este trabajo?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

De la documentación: Las declaraciones bloque finally se ejecutan independientemente de si el bloque Try encuentra un error de terminación. Windows PowerShell ejecuta el bloque Finally antes de que finalice el script o antes de que el bloque actual salga del alcance. Un bloque Finally se ejecuta incluso si usa CTRL + C para detener la secuencia de comandos. Un bloque Finally también se ejecuta si una palabra clave Exit detiene el script desde dentro de un bloque Catch.

+0

Gracias por seleccionar este cmdlet. Estoy bastante seguro de que ayudará en el futuro. – culter

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

¿Puedes darnos alguna explicación sobre lo que está haciendo este código? – rayryeng

+1

Dado que el póster original nunca respondió, le daré una explicación. 'Start-Transcript' lanzará un error si ya se ha iniciado. El código anterior primero intenta iniciar la transcripción. Si la transcripción ya se ha iniciado, detecta el error, detiene la transcripción y luego la inicia de nuevo. Esto garantiza que la salida se envíe a la ubicación especificada por _ $ myOutLog_. Sin embargo, probablemente sea una mejor práctica detectar el error específico en lugar de todos los errores. La línea '} catch {' se convertiría en '} catch [System.InvalidOperationException] {'. –

Cuestiones relacionadas