tôi đã không hài lòng với bất kỳ câu trả lời tôi đã tìm ra, vì vậy tôi trộn một ít và đến với điều này (trong PowerShell 3.0+):
$output = try{your_command *>&1}catch{$_}
Với điều này bạn có thể chụp tất cả các lỗi và đầu ra được tạo ra bằng cách cố gắng sử dụng your_command
.
Nó bắt ngoại lệ khi bạn sử dụng một lệnh không tồn tại:
PS C:\Users\jdgregson> $output = try{your_command *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
your_command : The term 'your_command' is not recognized as the name of a
cmdlet, function, script file, or operable program. Check the spelling of the
name, or if a path was included, verify that the path is correct and try again.
At line:1 char:15
+ $output = try{your_command 2>&1}catch{$_}
+ ~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (your_command:String) [], Comman
dNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\Users\jdgregson>
Nó bắt ngoại lệ khi bạn vượt qua đối số hợp lệ để một lệnh hiện có:
PS C:\Users\jdgregson> $output = try{cat C:\invalid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
cat : Cannot find path 'C:\invalid-path.txt' because it does not exist.
At line:1 char:15
+ $output = try{cat C:\invalid-path.txt 2>&1}catch{$_}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\invalid-path.txt:String) [Ge
t-Content], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCo
ntentCommand
Và nó bắt đầu ra nếu có không có vấn đề gì với lệnh của bạn cả:
PS C:\Users\jdgregson> $output = try{cat C:\valid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
this file is really here
Nó hoạt động cho bạn ví dụ:
PS C:\Users\jdgregson> $output = try{Test-Error *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
echo
WARNING: warning
Test-Error : error
At line:1 char:15
+ $output = try{Test-Error *>&1}catch{$_}
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,Test-Error
@JasonMArcher cảm ơn bạn đã cập nhật thẻ về câu hỏi này! Có điều gì thêm chúng ta nên làm vì nó được cố định trong V3 và tôi đã được ban đầu bằng cách sử dụng V2? Cảm ơn. – smaclell
Điều đó phụ thuộc, bạn chỉ muốn câu trả lời cho V2? Đây không phải là vấn đề dành riêng cho V2. Do đó, ý tưởng tốt nhất là ưu tiên các câu trả lời thực tế với phiên bản PowerShell mà chúng được sử dụng. :) – JasonMArcher
Tôi đã thêm một số ghi chú cho các câu trả lời hiện có về khả năng tương thích với phiên bản PS. – JasonMArcher