讓你的桌機可以執行編寫好的PowerShell腳本檔案(.ps1)
我不喜歡PowerShell的語法,總覺得微軟在自己的OS生態圈,使用C#加上本來就在作業系統底層的.NET Framework就解決(謎之音:看看那愚蠢的副檔名!),幹嘛要另外創造出一個語言?但有時候需要方便又快速完成的情境下,又非得需要它不可,這一篇就是在教你怎麼開啟在Windows WorkStation版本中被封印的PowerShell。
基於安全的因素,在一般的Windows工作站版本,PowerShell運行檔案式的Script能力是被封印起來,必須要自己手動打開,例如你開啟一個PowerShell隨意執行一個叫做「Sample.ps1」的檔案,可能會得到下列的提示語句:
PS C:\Users\Slashview> .\Sample.ps1
.\Sample.ps1 : 因為這個系統上已停用指令碼執行,所以無法載入 C:\Users\Slashview\Sample.ps1 檔案。
如需詳細資訊,請參閱 about_Execution_Policies,網址為 https:/go.microsoft.com/fwlink/?LinkID=135170。
這不是微軟爛,是微軟怕一般使用者耍天,無端去執行可能會毀損電腦的惡意腳本。
如何讓PowerShell執行編寫好的.ps1檔案
解決方式很簡單,把執行權限打開便是。
Step 1. 以Administrator的權限,開啟Cmd,並在之中輸入PowerShell切換到PS工作環境。
Step 2. 輸入指令「Get-ExecutionPolicy」,查看你現在PS被鎖在哪個權限下,理論上會是被鎖住的權限。
PS C:\Users\Slashview> Get-ExecutionPolicy
Restricted
Step 3. 輸入指令「Get-ExecutionPolicy」來進行執行權限的切換,以一般的開發環境來說,選擇「RemoteSigned」已經足夠
PS C:\Users\Slashview> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
是的,就這樣而已,不放心的話可以再輸入一次「Get-ExecutionPolicy」查看你現在的PowerShell執行權限。
-ExecutionPolicy屬性列表
簡單的說明列表如下,列的越下面的表示擁有更高(更無所謂)的執行權限,除非你有非得必要的理由,否則最好不要開這麼高的權限,以免自己婊到自己。
- Restricted:
Does not load configuration files or run scripts. Restricted is the default execution policy. - AllSigned:
Requires that all scripts and configuration files be signed by a trusted publisher, including scripts that you write on the local computer. - RemoteSigned:
Requires that all scripts and configuration files downloaded from the Internet be signed by a trusted publisher. - Unrestricted:
Loads all configuration files and runs all scripts. If you run an unsigned script that was downloaded from the Internet, you are prompted for permission before it runs. - Bypass:
Nothing is blocked and there are no warnings or prompts. - Undefined:
Removes the currently assigned execution policy from the current scope. This parameter will not remove an execution policy that is set in a Group Policy scope.
最後要補充說明的是,在PowerShell的觀點中,每一個身分的ExecutionPolicy均為獨立,所以如果你想要透過某一身分去執行PowerShell的話,可能要用「Set-ExecutionPolicy -Scope OOOOO -ExecutionPolicy XXXXX -Force」稍微設定一下。