11

スケジュールされたタスクとして実行したいスクリプトがありますが、想定どおりに実行されません。続行する前に、Start-Process と -Wait スイッチを使用して実行可能ファイルを呼び出そうとしています。ラインは

Start-Process -FilePath "C:\Pfx Engagement\Admin\Utilities\Backup Restore\BackupRestoreUtil.exe" -ArgumentList "/f "$backup_directory"" -Wait

コマンドプロンプトから呼び出す場合、つまり:

パワーシェル .\script.ps1

できます。コマンドを実行し、それが完了するのを待ってから次に進みます。そのコマンドが終了した後に実行する必要があるスクリプトは他にもあります。問題は、スケジュールされたタスクの場合、待機しないことです。基本的なトラブルシューティングを行って、最初に「スクリプト」という名前のスケジュールされたタスク アカウントを使用して runas でコマンド ウィンドウを開こうとしました。だから私は走る

runas /env /user:Scripts コマンド

タスク アカウントでコマンド プロンプト ウィンドウを開きます。そのコマンド プロンプトから、「powershell .\script.ps1」を再試行しますが、今回は待機しません。コマンドを実行し、コマンドが終了する直前に移動します。そのため、runas Administrator で新しいコマンド プロンプトを開くまでは、「スクリプト」アカウントに問題があるのではないかと考えていました。

runas /env /user:管理者コマンド

この管理者コマンド プロンプトからスクリプトを呼び出すと、-Wait スイッチも無視され、スクリプトは終了を待たずに呼び出した直後に移動します。

これに関する奇妙な部分は、runas を実行せずに管理者アカウントからコマンド プロンプトから呼び出すと、機能することです。同じアカウント、2 つの異なる結果。ここで一体何が起こっているのか、そして同様に重要なのは、それを修正する方法についてのアイデアはありますか?

OS は Server 2008 R2 で、powershell 3.0 を実行しています

4

1 に答える 1

10

なぜそうしているのかはわかりませんが、これでうまくいくと思います:

$proc = Start-Process -FilePath "C:\Pfx Engagement\Admin\Utilities\Backup Restore\BackupRestoreUtil.exe" -ArgumentList "/f "$backup_directory"" -Passthru
do {start-sleep -Milliseconds 500}
until ($proc.HasExited)

-Passthru スイッチにより、プロセスの Process オブジェクトが返されます。これをテストして、プロセスがいつ終了したかを確認できます。

于 2013-12-26T20:39:45.077 に答える