PowerShell スクリプトを一時的に停止する方法



スクリプトは、特にWindowsでは、作業を自動化する便利な方法です。PowerShellは柔軟性が高いため、この用途によく使用されます。しかし、場合によってはスクリプトを一時停止する必要があることがあります。手動入力を待つ場合や、単にプロセスを中断する場合などです。そのための最適な方法を見つけるのは、特にユーザーのキー入力を待つのではなく、時間を指定して遅延させたい場合など、少し難しい場合があります。そこで、このガイドでは、PowerShellスクリプトを一定時間(秒数)またはユーザーがキーを押すまで一時停止させる方法について説明します。また、コマンドプロンプト(cmd.exe)を使用する場合とスクリプトの動作の違いも理解しておくと便利です。すべてが互換性があるわけではないからです。

スクリプトを作成する際、スクリプトが止まることなく連続して実行されることにうんざりするかもしれません。そんな時に便利なのが、一時停止機能です。プロセスを自動化したいけれど、ある程度の制御も必要な場合は、一時停止機能を使うことでフローをより適切に管理できます。例えば、次のステップを開始する前に遅延時間を追加したり、続行する前にユーザー入力を待ったりできます。ちなみに、一部のコマンドはPowerShellとcmdのどちらを使用しているかによって動作が異なるため、その違いを理解しておくと混乱を防ぐのに役立ちます。

PowerShell スクリプトを特定の時間またはユーザー入力まで一時停止する方法

スクリプトを正確な秒数だけ一時停止する

これは最もシンプルで、ある程度信頼性が高い方法です。スクリプトを一定秒数だけ遅延させたい場合は、Start-Sleepコマンドを使用できます。これはシンプルで、ユーザーの操作に依存しないため、非常に効果的です。待機したい秒数(またはミリ秒)を指定するだけです。

  • 使用方法: Start-Sleep -Seconds 5— これはちょうど5秒間待機します。なぜ動作するのかは不明ですが、設定によっては、特にシステムに負荷がかかっている場合、スリープ時間がわずかにずれることがあります。それでも、ほとんどの用途では非常に正確です。

より短い一時停止が必要な場合は、ミリ秒単位で指定することもできますStart-Sleep -Milliseconds 500。これは、0.5秒の遅延が必要な場合に便利です。

ユーザーがキャンセルできるタイムアウトで一時停止する

もう一つの方法は、PowerShellのtimeoutコマンドを使うことです。これはちょっと変わった使い方です。最大待機時間を設定できますが、重要な機能は、ユーザーが任意のキーを押して残りの待機時間をスキップできることです。一時停止させたいけれど、ユーザーに早く再開する選択肢を与えたい場合に便利です。

  • 例: timeout /t 10— これは 10 秒間待機しますが、ユーザーがいずれかのキーを押すとすぐに進みます。

ここで奇妙な点があります。PowerShellでは、実際にはtimeout /t 10内部から実行できますが、その後は待機状態になります。しかし、キーを押すと途中で中断されます。つまり、これは一種のハイブリッド、つまり時間制限付きの一時停止と、オプションで早期中断が可能な状態です。ただし、これはコマンドプロンプトを起動せずにPowerShellコマンドのみを実行する場合には機能しないことに注意してください。また、特定のWindowsバージョンでは動作が異なったり、特別な構文が必要になる場合があるという報告もあります。

PAUSE でスクリプトを停止し、ユーザー入力を待つ方法

完全に停止してユーザーがEnterキーを押すまで待つことが目的であれば、従来のPASUEcmd /c pauseコマンドを使用できます。これはPowerShellネイティブのコマンドではありませんが、 PowerShell内から実行することも、cmd.exe内で直接実行することもできます。

  • サンプル: cmd /c pause。これを実行すると、「続行するには任意のキーを押してください…」と表示され、キーが押されるまで待機します。

この方法は、誰かが準備完了してから次に進みたい手動スクリプトに適しています。ただし、バックグラウンドタスクや自動スクリプトには適していないことに注意してください。これらのスクリプトはユーザー入力に応答できないためです。

これは cmd.exe でも機能しますか?

はい、コマンドプロンプトでも同じコマンドが使えますが、いくつか注意点があります。Start-SleepはPowerShellのコマンドレットなので、PowerShellを明示的に起動しない限り、cmdでは実行されません。ただし、やのようなコマンドはtimeout /tcmdpauseに組み込まれています。cmdtimeoutのコマンドは、スクリプトを少し待機させつつ、キーを押すことで途中でキャンセルできるようにしたい場合に最適です。

興味深いことに、Sleep(ハイフンやPowerShellモジュールなしでは)cmdでは動作しないため、PowerShellでのみ機能します。一方、バッチファイルを作成する場合は、友人timeoutと協力する必要があります。pause

結局のところ、どの一時停止方法が機能するかは環境によって異なります。特に、Windowsのバージョンや設定によってスクリプトが期待通りに動作しない場合は、試行錯誤を繰り返すしかない場合もあります。



この記事は役に立ちましたか?