指令碼執行後保持 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn