PowerShellスクリプトを正常に実行した後にPsExecがハングするのはなぜですか?


12

スクリプトはかなり簡単です。一連のWindowsサービスを開始しようとします。ターゲットマシン上でローカルに実行すると正常に動作します。PsExecを介して実行した場合、スクリプトは実際に正常に実行されています。CMDプロンプトで「Enter」キーを押すまで、スクリプトは戻りません。これは問題です。これはTeamCityから呼び出されているため、PsExecが戻るのを待ってエージェントがハングするためです。

私は次を試しました:

  • Powershellスクリプトの最後にexitand exit 0を追加する
  • このSF質問の< NUL回答ごとに、PsExec呼び出しの最後にa を追加します
  • >標準出力リダイレクトの追加

これは私が実際にpsexecを呼び出す方法です:

psexec \\target -u domain\username -p password powershell c:\path\script.ps1

私が何をしても、ローカルでcmdプロンプトが表示されるまでハングします。Enterキーを押すと、次のメッセージが表示されます。

powershell exited on target with error code 0.

回答:


11

これは一般的な問題であることが判明しました。ここで解決策を見つけました。基本的に、cmdを使用してstdinのデータをパイプすると、実行後に適切に返されます(powershellではなくcmdを介して実行されるため)。

例:

psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"

コマンドライン-カスタムスクリプトまたはコマンドライン-実行可能(TeamCity)として設定されていますか?
Wojtek Turowicz

OK実行可能ファイルとして設定しましたが、役に立ちました。ありがとう、私はそれを診断するのに1日費やした。言葉を広める!
Wojtek Turowicz

1日後、問題が
再発しました

11

私は答えが遅れて来ることを知っています、それはすでに理解されていたでしょう、そうでなければ、それは将来の訪問者に役立つかもしれません。

STDINは、ハングから抜け出すためにPowerShell実行でリダイレクトされる必要があります(ここではSTDINで待機します)。これを行うには、-inputformat noneを使用します。

powershell -inputformat none -File powershell_script.ps1 働くでしょう。

チェック-https://connect.microsoft.com/PowerShell/feedback/details/572313/powershell-exe-can-hang-if-stdin-is-redirected


これは機能するだけでなく、受け入れられた答えが機能する理由も説明します。ありがとう!
jpaugh

5
psexec \\target -u domain\username -p password -d powershell c:\path\script.ps1

問題も修正します。

-dpsexecフラグは、非対話形式での「実行と終了」に似ています。

-dアプリケーションが終了するのを待ちません。

非対話型アプリケーションにのみ使用してください。


0

Powershellが終了していません。このコマンドラインを試してください

Powershell -command script.ps1

0

psexecVBSスクリプトを使用して実行しており、最高とマークされたソリューション(EX:)psexec \\target -u domain\username -p password cmd /c "echo . | powershell c:\path\script.ps1"は、3回目またはそれ以降の実行中にのみ機能していました。掘り続けて、各スイッチの説明を見つけました

私は「-s」を試してみることにし、毎回私のために働いたものが私の例です:

call C:\psexec.exe %SERVER_NAME% -u %USERNAME% -p %PASSWORD% -h -s cscript %pathTomyVBSscript%
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.