指令碼執行後保持 PowerShell 控制檯開啟

Marion Paul Kenneth Mendoza 2022年6月7日
指令碼執行後保持 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 傳統命令,但我們可以使用 Read-Host PowerShell 命令重新建立它。

示例程式碼:

Read-Host -Prompt "Press Enter to continue..."

該方法唯一需要注意的是與 pause 命令不同,它不接受任何鍵盤敲擊,而只接受 Enter 鍵來終止指令碼。它可能與 pause 命令不同,但上面的程式碼段仍將在終止指令碼之前保持螢幕。

有一種方法可以通過編輯登錄檔來永久和持久地阻止指令碼退出。由於登錄檔具有作業系統範圍,因此我們所做的任何更改不僅會影響一個特定的指令碼,還會影響你將來執行的所有指令碼。

因此,在繼續之前請記住這一點。

現在,要繼續,我們應該先備份登錄檔。我們將為本文操作 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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn