4

当社の製品の 1 つで PowerShell を使用しようとしている他の誰かに代わって問題を調査しています。当社の製品はコマンドを実行して操作を実行でき、ほとんどの人は .exe を直接呼び出して正常に動作します。ただし、1 人のユーザーが次のメソッドを使用して、いくつかの powershell を呼び出しています。

powershell -version 2.0 -NonInteractive -ExecutionPolicy ByPass -file ($ScriptsFolder)p4_commit.ps1 {"($Message)" ($Files)}

ただし、それは決して終了しないため、ソフトウェアは座って永遠に待機します。スクリプトは単純な「exit 0」で終了し、直前の行は、プロセスを外部でキャンセルした場合に表示されるデバッグ出力であるため、スクリプトの最後まで問題ありません (そうでなければ、スクリプトは正常に実行されます)。

exit コマンドを削除して、powershell セッション キルに置き換えると、次のようになります。

Stop-Process -Id $PID

その後、終了しますが、もちろん終了コードは 0 ではなく、変更をロールバックするため、適切な回避策ではありません。

それ以外の場合は、「exit 0」に戻って、送信されたパラメーターを含む powershell.exe がまだタスク マネージャーに表示されていることがわかります。ですから、それが終了しているわけではなく、私たちがそれを取り上げているわけではありません。ただ終了していないだけです。

悲しいかな、私はパワーシェルの専門家ではないので、質問は「出口の出口を止めるものは何ですか?」

4

1 に答える 1

2

OK、確認しました。start /wait を指定して powershell.exe を呼び出すコマンドを修正すると修正されます。理由はわかりません(出口をランダムなものに変更したかのように、間違いなくスクリプトの最後に到達していたため、エラーが発生しました)。

それでも、問題は解決しました...

于 2013-02-14T15:06:31.477 に答える