スクリプト実行後も PowerShell コンソールを開いたままにする
スクリプトをダブルクリックまたは右クリックして [PowerShell で実行]または [Windows PowerShell で開く]を選択してスクリプトを実行すると、PowerShell コンソールが一時的に表示されてから消えます。このシナリオは、特にエラーをスローした場合に、スクリプトが自然に終了するために発生します。
スクリプトの実行後に PowerShell コンソールを開いたままにするためのいくつかのオプションを確認し、この記事でそれらについて説明します。
PowerShell の終了を停止する
便利なことに、Windows PowerShell には、スクリプトの実行時に渡すことができる switch 引数があります。この引数は、-NoExit
パラメーターと呼ばれます。
スクリプトの実行時にこれを追加すると、エラーが発生したとき、またはスクリプトの実行が正常に終了したときに PowerShell コンソールが終了するのを防ぐことができます。
powershell.exe "C:\PS\sample_script.ps1" -NoExit
ただし、これは、スクリプトを外部で実行または呼び出している場合にのみ可能です。PowerShell ISE などのコードエディタでスクリプトを実行および編集しているときに、画面を保持して画面が終了しないようにする方法がある場合はどうなりますか?
これをネイティブに実行する PowerShell コマンドがない場合があります。しかし、私たちは創造性を発揮し、目標を達成するための方法を作成することができます。先に進む前に、PowerShell スクリプトの実行時に、従来のコマンド pause
を使用して画面を保持できることに注意してください。
出力:
Press any key to continue...
pause
legacy コマンドに対応するものがない場合がありますが、Read-Host
PowerShell コマンドを使用してこれを再作成できます。
サンプルコード:
Read-Host -Prompt "Press Enter to continue..."
このメソッドの唯一の注意点は、pause
コマンドとは異なり、キーボードストロークを受け入れませんが、スクリプトを終了するためにEnterキーのみを受け入れます。pause
コマンドとは似ていない場合がありますが、上記のスニペットはスクリプトを終了する前に画面を保持します。
レジストリを編集することにより、スクリプトが終了するのを永続的かつ永続的に防ぐ方法があります。レジストリにはオペレーティングシステムのスコープがあるため、変更を加えると、特定の 1つのスクリプトだけでなく、将来実行するすべてのスクリプトにも影響します。
したがって、先に進む前にこれを覚えておいてください。
次に進むには、最初にレジストリをバックアップする必要があります。この記事では HKEY_CLASSES_ROOT
レジストリファイルを操作するので、コマンドプロンプトを開き、次のコマンドを実行してバックアップします。
reg export HKCR C:\Temp\HKCR.Reg /y
レジストリのバックアップに成功したので、さらに先に進むことができます。以下のコマンドをコピーして、ファイルを .reg
拡張子で保存します。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Applications\powershell.exe\shell\open\command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"& \\\"%1\\\"\""
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit \"-Command\" \"if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & \\\"%1\\\"\""
保存したら、新しく作成した reg
ファイルをダブルクリックして、変更を有効にします。上記のコマンドは、PowerShell の実行ポリシーを変更し、PowerShell スクリプトの実行時にデフォルトで -NoExit
スイッチパラメーターを含めます。
作成したスクリプトを実行するときに、-NoExit
引数を追加する必要はありません。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn