Я не был удовлетворен любой ответ, который я находил, поэтому я смешал несколько и пришел с этим (в PowerShell 3.0+):
$output = try{your_command *>&1}catch{$_}
При этом вы можете захватить все ошибки и которые генерируются при попытке использовать your_command
.
Он ловит исключения при использовании несуществующей команды:
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>
Он ловит исключения при передаче недопустимых аргументов существующей команды:
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
И ловит, если выход есть не было никаких проблем с вашей командой:
PS C:\Users\jdgregson> $output = try{cat C:\valid-path.txt *>&1}catch{$_}
PS C:\Users\jdgregson> echo $output
this file is really here
Это работает для вашей пример тоже:
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 благодарит за обновление тегов по этому вопросу! Есть ли что-то дополнительное, что мы должны делать, поскольку оно исправлено в V3, и я изначально использовал V2? Благодарю. – smaclell
Это зависит от того, нужны ли только ответы на V2? Это не проблема, характерная для V2. Таким образом, наилучшей идеей является предпочтение фактических ответов с версией PowerShell, для которой они предназначены. :) – JasonMArcher
Я добавил несколько замечаний к существующим ответам о совместимости версий PS. – JasonMArcher