2012-04-16 4 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 

Можно ли проверить, если запись выполняется и остановить его, если-то при запуске сценария ? Или как надежно остановить его в конце? Спасибо

ответ

7

Как насчет пустого try-catch блока в начале скрипта powershell, чтобы остановить переписывание?

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

Это просто и работает сразу для меня! Спасибо – culter

+0

Спасибо за отзыв о 'Out-Null'! Это хорошая альтернатива '$ null' –

2

Попробуйте функцию Test-Цитирование можно посмотреть здесь: http://poshcode.org/1500

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

Это не работает в Powershell 4 (возможно, раньше), исключение должно быть изменено. – svandragt

6

Не будет ли что-то нравится эта работа?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

Из документации: В заключении блокирующих заявлений работать независимо от того, встречает ли блок Try ошибку терминатора. Windows PowerShell запускает блок finally до завершения сценария или до того, как текущий блок выходит из области видимости. A Окончательный блок работает, даже если вы используете CTRL + C, чтобы остановить сценарий. Блок finally также выполняется, если ключевое слово Exit останавливает скрипт из блока Catch.

+0

Спасибо, что выбрали этот командлет. Я уверен, что это поможет в будущем. – culter

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

Можете ли вы дать некоторое объяснение тому, что делает этот код? – rayryeng

+1

Поскольку исходный плакат не ответил, я дам объяснение. 'Start-Transcript' выдаст ошибку, если она уже запущена. Приведенный выше код сначала пытается начать транскрипцию. Если транскрипция уже запущена, она ловит ошибку, останавливает транскрипцию, а затем снова запускает ее. Это гарантирует, что вывод отправляется в местоположение, указанное _ $ myOutLog_. Вероятно, лучше всего поймать конкретную ошибку, а не все ошибки. Линия '} catch {' затем станет '} catch [System.InvalidOperationException] {'. –

Смежные вопросы