讓你的桌機可以執行編寫好的PowerShell腳本檔案(.ps1)

我不喜歡PowerShell的語法,總覺得微軟在自己的OS生態圈,使用C#加上本來就在作業系統底層的.NET Framework就解決(謎之音:看看那愚蠢的副檔名!),幹嘛要另外創造出一個語言?但有時候需要方便又快速完成的情境下,又非得需要它不可,這一篇就是在教你怎麼開啟在Windows Work Station版本中被封印的PowerShell。

基於安全的因素,在一般的Windows工作站版本,PowerShell運行檔案式的Script能力是被封印起來,必須要自己手動打開,例如你開啟一個PowerShell隨意執行一個叫做「Sample.ps1」的檔案,可能會得到下列的提示語句:

PS C:\Users\Slashlook> .\Sample.ps1
.\Sample.ps1 : 因為這個系統上已停用指令碼執行,所以無法載入 C:\Users\Slashlook\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\Slashlook> Get-ExecutionPolicy
Restricted

Step 3. 輸入指令「Get-ExecutionPolicy」來進行執行權限的切換,以一般的開發環境來說,選擇「RemoteSigned」已經足夠

PS C:\Users\Slashlook> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

是的,就這樣而已,不放心的話可以再輸入一次「Get-ExecutionPolicy」查看你現在的PowerShell執行權限。

-ExecutionPolicy屬性列表

簡單的說明列表如下,列的越下面的表示擁有更高(更無所謂)的執行權限,除非你有非得必要的理由,否則最好不要開這麼高的權限,以免自己婊到自己。

  1. Restricted:
    Does not load configuration files or run scripts. Restricted is the default execution policy.
  2. AllSigned:
    Requires that all scripts and configuration files be signed by a trusted publisher, including scripts that you write on the local computer.
  3. RemoteSigned:
    Requires that all scripts and configuration files downloaded from the Internet be signed by a trusted publisher.
  4. 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.
  5. Bypass:
    Nothing is blocked and there are no warnings or prompts.
  6. 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」稍微設定一下。

PowerShell PS .PS1 ExecutionPolicy CanNotRun Script