2012-04-16 38 views
7

Tôi nhận được thông báo này mọi kịch bản của tôi không kết thúc đúng cách và stop-bảng điểm không thực hiện:powershell - cách kiểm tra xem bản ghi có đang chạy không?

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 

Có thể kiểm tra xem bảng điểm đang chạy và ngăn chặn nó với if-then lúc bắt đầu của kịch bản ? Hoặc làm thế nào để dừng nó một cách đáng tin cậy vào cuối? Cảm ơn bạn

Trả lời

7

Còn khối trống try-catch ở đầu tập lệnh powershell của bạn để ngừng sao chép thì sao?

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

Điều này thật đơn giản và nó hoạt động ngay lập tức cho tôi! Cảm ơn bạn – culter

+0

Cảm ơn bạn đã viết về 'Out-Null'! Đó là một lựa chọn tốt để '$ null' –

2

Hãy thử chức năng Test-chép sẵn ở đây: http://poshcode.org/1500

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

Điều này không hoạt động trong Powershell 4 (có thể sớm hơn) ngoại lệ phải thay đổi. – svandragt

6

Sẽ không phải cái gì đó như công việc này?

try 
{ 
    Start-Transcript 
    # Do my stuff 
} 

finally 
{ 
    Stop-Transcript 
} 

Từ tài liệu: Câu lệnh chặn cuối cùng bất kể khối thử có gặp lỗi kết thúc hay không. Windows PowerShell chạy khối Cuối cùng trước khi tập lệnh chấm dứt hoặc trước khi khối hiện tại vượt quá phạm vi. Khối Cuối cùng sẽ chạy ngay cả khi bạn sử dụng CTRL + C để dừng tập lệnh. Khối Cuối cùng cũng chạy nếu từ khóa Thoát dừng tập lệnh từ bên trong khối Bắt.

+0

Cảm ơn bạn đã chọn ra lệnh ghép ngắn này. Tôi chắc rằng nó sẽ giúp ích trong tương lai. – culter

1
try { 
    Start-Transcript -path $myOutLog 

} catch { 

     stop-transcript 

     Start-Transcript -path $myOutLog 
} 
+2

Bạn có thể cung cấp một số giải thích về mã này đang hoạt động không? – rayryeng

+1

Vì áp phích ban đầu chưa bao giờ trả lời tôi sẽ đưa ra một lời giải thích. 'Bắt đầu-Transcript' sẽ ném một lỗi nếu nó đã được bắt đầu. Đoạn mã trên cố gắng bắt đầu phiên mã đầu tiên. Nếu phiên mã đã được bắt đầu, nó sẽ bắt lỗi, dừng phiên mã, sau đó bắt đầu lại. Điều này đảm bảo đầu ra đang được gửi đến vị trí được chỉ định bởi _ $ myOutLog_. Nó có lẽ là thực hành tốt hơn để nắm bắt các lỗi cụ thể thay vì tất cả các lỗi mặc dù. Dòng '} catch {' sau đó sẽ trở thành '} catch [System.InvalidOperationException] {'. –

Các vấn đề liên quan