IDEを使用した場合のPowershellからサードパーティの実行可能ファイルを呼び出すエラー

StackOverflow https://stackoverflow.com/questions/2095088

  •  21-09-2019
  •  | 
  •  

質問

私は、用途は(ディスクの使用状況もともとSysinternalsの)ディレクトリのサイズを計算します。

私はコンソールでdu c:\Backupを実行する場合、期待どおり

は、それが動作しますが、ISEまたはPowerguiブロック内のコード実行の同じ行が予想される結果、プラスの誤差を与えます。

+ du <<<<  c:\backup
+ CategoryInfo          : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError

それはなぜですか?どのように私はこのエラーを回避するのですか?私は&を使用して呼び出す表現しようとしたが、ノーゴーます。

助けてくれてありがとう。

役に立ちましたか?

解決

あなたはヌル例えばに標準エラー出力をリダイレクトすることができ、これを回避するには:ます。

du 2> $null

基本的には、コンソールのホストとISE(だけでなく、リモーティングは)違った標準エラー出力ストリームを扱います。 PowerShellは、ライトが画面に出力し、エラーの色、他のアプリケーションと一緒に仕事にedit.comのようなアプリケーションをサポートするために、コンソールのホスト上では重要でした。 I / Oストリームは、コンソールのホスト上にリダイレクトされない場合は、PowerShellは直接への書き込みにネイティブEXEにコンソールハンドルを提供します。 PowerShellは、それは$エラーを介して、またはPowerShellのの標準エラー出力ストリームに書き込むことで、エラーを報告することはできませんので、書かれたエラーがあることを確認することはできませんので、これはPowerShellをバイパスします。

ISEとリモーティングは、彼らがstderrにエラーが表示され、その後、エラーおよび更新$エラーを書くんので、このシナリオをサポートする必要はありません。

他のヒント

私は最近、同じ問題に直面してきたが、私はstdoutに送らstderr出力を取得したいと思います。あなたは次のことがうまくいくと思うだろう。

    & du 2>&1

しかし、PowerShellは、完成されたリダイレクトをinterpreteと「ドゥ」の後にそれを処理します。私が見つけた回避策は、CMD.EXE / Cを使用して、それを呼び出すことです。

    & cmd /c 'du 2>&1'
NativeCommandError出力を抑制するための別の方法は、<全角>オブジェクトを変換することです。のは、文字列の<のhref = "HTTPSの下部に概説されているように、パイプライン内:// stackoverflowの.COM / A / 12866669 / 1127485" >この回答するます:

du c:\Backup 2>&1 | %{ "$_" }

試します:

du 2>&1 | %{ "$_" }

前のFIXにエラーがリダイレクトされますが、ユーザー名やパスワードが良くないか、統合認証を使用する場合は、あなたがアクセス権を持っていない例による場合は、実際のエラーを失う可能性があります。

だからここにエラー処理と、特定のエラーバイパスを実装する方法がある(つまり1ではありません)PSEXECによって提起ます。

 try{
            	psexec command .....
            }
            catch [System.Management.Automation.RemoteException]{
                if ($_.TargetObject -like "Connecting to *" -and $_.CategoryInfo.Category -eq "NotSpecified" -and $_.FullyQualifiedErrorId -eq "NativeCommandError" -and $_.InvocationInfo.MyCommand.Name -like "psexec*.exe"){
                    $error.Remove[$Error[0]]
                }
                else{
                    Throw
                }
            }        
            catch{
                throw
            }

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top