最初的原意是利用 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 就可以了.