iT邦幫忙

DAY 11
2

強而有力的 Windows PowerShell系列 第 11

Windows PowerShell 基本操作 - 執行 Windows PowerShell 腳本

這次延續上次的腳本檔案,要說明如何執行 Windows PowerShell 腳本。
上次我們已經在「我的文件」中,建立了一個名稱為 today.ps1 腳本檔,卻在執行時,顯示如下的錯誤訊息:

之所以如此,是因為安全性的考量,在沒有更改過設定之前,是不允許執行 Windows PowerShell 的腳本檔。這就是所謂的**「執行原則」**。在預設狀態下,執行原則的設定值是 Restricted,也就是說你根本不能執行任何的 Windows PowerShell 腳本檔。

**「執行原則」**有下列 4 種:
Restricted :關閉腳本檔的執行功能,這是預設的設定值。
AllSigned :只允許執行受信任發行者簽署過的腳本檔。
RemoteSigned :在本機電腦所撰寫的腳本檔,不需要簽署就可執行;但是從網際網路(例如:email、MSN Messenger)下載的腳本檔就必須經過受信任發行者的簽署才能執行。
Unrestricted :任何腳本檔皆可被執行,但是於執行網際網路下載的腳本檔時,會先出現警告的提示視窗。

我們可以先利用 Get-ExecutionPolicy 來確認系統目前的指令檔執行限制為何:

Get-ExecutionPolicy

如果您在個人電腦上執行,為了方便實驗起見,可以把腳本檔的**「執行原則」**改成 Unrestricted。但要注意的是,這樣設定之後,請確認從網際網路所下載的腳本檔不會對年的電腦產生任何威脅,因為只要執行的權限夠,都有可能會執行危害系統的腳本檔。

如果是在上線的伺服器中,為了方便起見,建議把腳本檔的**「執行原則」**改成 RemoteSigned,這麼一來自己在本機建立的腳本檔於執行時,不會受到限制;但會限制來自網際網路的腳本檔。

以下面的指令來說,會把腳本檔的**「執行原則」**改為 Unrestricted:

Set-ExecutionPolicy Unrestricted

但是,為什麼執行上面的程式碼會出現如下的錯誤:

PS C:\Users\alexc\Documents> Set-ExecutionPolicy Unrestricted

執行原則變更
執行原則有助於防範您不信任的指令碼。如果變更執行原則,可能會使您接觸到
about_Execution_Policies 說明主題中所述的安全性風險。您要變更執行原則嗎?
[Y] 是(Y)  [N] 否(N)  [S] 暫停(S)  [?] 說明 (預設值為 "Y"): 
Set-ExecutionPolicy : 拒絕存取登錄機碼 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShel
l'。
位於 行:1 字元:20
+ Set-ExecutionPolicy <<<<  Unrestricted
    + CategoryInfo          : NotSpecified: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyComma
   nd

PS C:\Users\alexc\Documents>

這是因為從 Windows Vista 之後所引進的使用者帳戶控制(UAC)作祟所造成的,誠如大家所熟知的,除非在執行程式時,明確地指定要以系統管理員身分執行,否則即便是帳戶是管理者,也會用標準的使用者身分來執行。因此欲解決上述的錯誤訊息,請由開始功能表中,在 Windows PowerShell 圖示上,按下滑鼠右鍵,選擇「以系統管理者身分執行」,接著執行 Set-ExecutionPolicy 去設定適當的**「執行原則」**即可。

Windows PowerShell 的腳本檔案之附檔名是 .ps1,假設我們要執行一個位於 C:\Users\alexc\Documents 目錄中,檔名為 today.ps1 腳本,可以直接在 Windows PowerShell 的命令列模式中,輸入如下的文字:

# 輸入完整的路徑與腳本的完整檔名
C:\Users\alexc\Documents\today.ps1
# 輸入完整的路徑與腳本的主檔名
C:\Users\alexc\Documents\today

如果目前所在的工作路徑剛好是 C:\Users\alexc\Documents,那就必須使用 1 個點(.)以及斜線(\)來提示目前的路徑:

# 使用腳本的完整檔名
.\today.ps1
# 使用腳本的主檔名
.\today

上一篇
Windows PowerShell 基本操作 - 編寫 Windows PowerShell 腳本
下一篇
Windows PowerShell 應用 - 收集電腦資料
系列文
強而有力的 Windows PowerShell33

1 則留言

0
philchen911
iT邦新手 5 級 ‧ 2020-08-24 17:33:46

請問變更原則這部份可以寫入script嗎?
如果可以,在系統詢問時,該如何傳入回應?
謝謝

我要留言

立即登入留言