直接打開PowerShell執行 xxx.ps1 的Script是可以正常運作的
但是要使用C# 去呼叫寫好的 xxx.ps1就會發生問題了
xxx.ps1 檔案無法載入,因為這個系統上已停用指令碼執行。如需詳細資訊,請參閱 \"get-help about_signing\"。"}
英文版
xxx.ps1 cannot be loaded because the execution of scripts is disabled on this system.
依照他的提示打指令"get-help about_signing"看了一下
PowerShell有些執行上的政策去限制了檔案(.ps1)的執行
有四種執行的政策
Restricted - 限制任何的.ps1的執行....這是預設值
AllSigned - 要執行的.ps1都要經過信任者的簽名發行
RemoteSigned - 這是允許存取本機電腦上.ps1,但是透過網路去存取的就不行
UnRestricted - 完全不限制.ps1的執行
指令"Get-ExecutionPolicy" 可以取得目前的政策狀況
如果是自己寫的.ps1應該是 RemoteSigned 的權限就可以執行了
如畫面顯示我的執行政策已經是 UnRestricted 但是還是出現一樣的錯誤後來才發現我使用的作業系統是 Server 2008 R2
同時會存在著 X86 和 X64兩種版本
需要檢查兩個版本是否都是可以執行的權限
X86的路徑
C:\Windows\system32\cmd.exe
X86的執行政策是 UnRestricted
接下來檢查X64的設定
C:\Windows\SysWOW64\cmd.exe
就會發現X64的執行政策是 Restricted,難怪一直都不能執行!!!
只要修改X64的政策就能執行了
這個問題困擾了我一陣子,經過這一次的經驗
下次在處理Server的問題時,就會多注意到X64和X86的版本問題
從失敗中學經驗~~
參考資料:
http://stackoverflow.com/questions/4037939/powershell-execution-of-scripts-is-disabled-on-this-system