PowerShell 的 Set-ExecutionPolicy

最初的原意是利用 PowerShell 做一個 SQL 數據庫備份,然後利用 Task Scheduler 變成按時每天自動 backup 數據庫 一次。一開始就碰上了這個 Set-ExecutionPolicy 的麻煩,找到解決辦法後順便把它記錄下來。

PowerShell 的 SecurityPolicy default 是 Restricted,Restricted 是最嚴格的,不過就會影響到一些指令會由於 Security Level 不足而執行不了,例如我今次要做的 SQL backup 有需要用到一些 SMO (SQL Server Management Objects),這樣 Restricted 就行不通了。

如果在 PowerShell 的 console 中可以執行 Set-ExecutionPolicy 去改變目前的 Security Level,例如:

PS> Set-SecutrityPolicy RemoteSigned

不過在 Task Scheduler 就不可以這樣,唯一可行的方法是把本機的 policy 更改。

如何修改?根據以下的步驟:

1. 打開 MMC

2. 進入 MMC 畫面

3. 在 Menu 中選取 File > Add or Remove Snap-ins

4. 選擇 Group Policy Object Editor

5. 出現 dialog windows, 不用改任何資料, 直接點選 Finish

6. 就會看到 Selected snap-ins 中多了一個 Local Computer Policy

7. 黠選 OK, 回到 MMC 畫面後可以看到多了一個 Local Computer Policy 的資料

8. 在 Local Computer Policy 之下可以找到 Windows PowerShell 一項

9. 雙擊 Windows PowerShell, 找它的細項 Turn on Script Execution

10. 再雙擊 Turn on Script Execution 進行修改

11.  在 Setting 頁點選 Enabled, Execution Policy 選用你所需要的 Security Level, 我這次需要使用 Allow local scripts and remote signed scripts, 即是 RemoteSigned

最後是 OK 然後關閉 MMC 就可以了.