powershell - PowerShell 「execution of scripts is disabled on this system.」

  显示原文与译文双语对照的内容

我正在嘗試運行一個. cmd 文件,該文件從命令提示符調用一個PowerShell腳本,並得到以下錯誤:

無法載入 Management_Install.ps1,因為這裡系統上的腳本執行已經被禁用。

我已經運行了 set-executionpolicy unrestricted,當我從PowerShell運行 get-executionpolicy 時得到 unrestricted

//Output 中

PS: usersadministrator> get-executionpolicy

無限制

來自DOS的//Output

c: projectsmicrosoft 。實踐。esbsourcesamplesmanagement PortalInstallScr

> 。management_install 。ps1 1

警告:正在運行 x86 powershell 。。

無法載入文件 C:ProjectsMicrosoft. 。esbsourcesamplesmanagement portalinstallscriptsmanagement_install 。ps1,因為在這裡系統上禁用腳本的執行。 有關詳細信息,請參閱"get-help about_signing"。

line:1 字元:25

  • management_install 。ps1 << <<1

    • CategoryInfo: NotSpecified: (: ) [],PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

c: projectsmicrosoft 。實踐。esbsourcesamplesmanagement PortalInstallScripts> 暫停

請點擊任意鍵以繼續下去." ..

系統是 Windows Server 2008 R2.

我做錯什麼了?

时间:

如果你正在使用 Windows 2008 R2,那麼有一個x64和x86版本,它們都必須有執行策略。 你是否在兩個主機中設置了執行策略?

你可以通過在powershell窗口中鍵入以下命令來設置執行策略:

Set-ExecutionPolicy RemoteSigned

有關更多信息,請參見這裡的

在 Windows 2012正在運轉的x64 one,我以前也有類似的問題和注意的是,默認

對於 Windows 7Windows 8Windows Server 2008 R2 或者 Windows Server 2012 作為管理員:,請運行以下命令

x86
打開 C:Windowssystem32cmd.exe
運行命令 powershell Set-ExecutionPolicy RemoteSigned

x64
打開 C:WindowsSysWOW64cmd.exe
運行命令 powershell Set-ExecutionPolicy RemoteSigned

你應該在這裡閱讀各種執行策略,它們允許:
MSDN - Windows POWERSHELL執行策略

在 Windows 7中:

轉到 開始菜單 並搜索"Windows PowerShell"。

右鍵單擊x86版本並選擇"作為管理員運行"。

在頂部,粘貼 Set-ExecutionPolicy RemoteSigned ;運行腳本。 選擇"是是"。

對 64位 ISE的版本重複這些步驟。

我正在澄清 @Chad Miller暗示的步驟。 感謝查德 !

RemoteSigned: 你自己創建的所有腳本都將運行,所有從互聯網下載的腳本都需要由受信任的發布者簽名。

好,只需鍵入以下命令更改策略:


Set-ExecutionPolicy RemoteSigned

如果你所在的環境不是管理員,你可以只為你設置執行策略,它將不需要管理員。


Set-ExecutionPolicy -Scope"CurrentUser" -ExecutionPolicy"RemoteSigned"

或者


Set-ExecutionPolicy -Scope"CurrentUser" -ExecutionPolicy"Unrestricted"

你可以在幫助條目中閱讀所有關於它的內容。


Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

大部分現有的答案解釋的為什麼 如何,但是很少有解釋的。 在你執行來自互聯網陌生人的代碼,特別是禁用安全措施的代碼之前,你應該明白你在做什麼。 這裡是關於這個問題的更多細節。

從 TechNet 關於執行策略頁面:

Windows 執行策略允許你確定 Windows PowerShell載入配置文件和運行腳本的條件。

PowerShell的基礎- 執行策略和代碼簽名 。are枚舉的好處是:

  • 執行控制Execution控制執行腳本的信任級別。
  • 磅的命令 Highjack - 防止在我的路徑中插入命令。
  • 標識是由開發人員本人創建和簽名的腳本,或者由證書頒發機構的證書頒發機構簽署的證書。
  • 完整的完整性 - 腳本不能被惡意軟體或者惡意用戶修改。

要檢查當前執行策略,可以運行 Get-ExecutionPolicy 。 但是你可能在這裡,因為你想改變它。

為此,你將運行 Set-ExecutionPolicy web cmdlet 。

在更新執行策略時,你將有兩個主要決策。

執行策略類型:

  • Restricted - 不能在系統上執行本地,遠程或者下載的腳本。
  • AllSigned - 所有運行的腳本都需要數字簽名。
  • RemoteSigned - 所有遠程腳本( UNC ) 或者下載的都需要簽名。
  • Unrestricted - 不需要任何類型的腳本簽名。

新更改的範圍

  • LocalMachine - 執行策略影響電腦的所有用戶。
  • CurrentUser - 執行策略隻影響當前用戶。
  • Process - 執行策略隻影響當前的Windows PowerShell進程。

例如如果你想要改變這個策略對剛到,可能出現意外行為中的執行策略的,你有操作運行以下命令:


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

: 為了更改執行策略時,你必須正在運行當通過為 Adminstrator 。 如果你處於常規模式,並嘗試更改執行策略,你將得到以下錯誤:

拒絕訪問註冊表項'hkey_local_machinesoftwaremicrosoftpowershell1shellidsmicrosoft 。powershell'。 隨著"作為管理員運行"option,要更改為默認( 歸屬地址) 作用域的執行策略,開始 Windows powershell.

如果你想在沒有從 Internet ( 或者至少不包含UNC元數據) 下載的腳本上加強內部限制,你可以強制策略只運行簽名的sripts 。 要簽署你自己的腳本,你可以按照hanselman文章上關於簽名PowerShell腳本的說明。

注意: 大多數人很可能會得到這個錯誤只要他們打開模塊和名稱,因為在用戶個人資料的第一件事就是PS試它啟動時,要做的就是執行腳本,該腳本將設置你的環境為喜歡它。

文件通常位於:


%UserProfile%My DocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1

通過運行powershell變數可以找到確切的位置

 
$profile

 

如果你在配置文件中沒有關心的問題,並且不想使用你的安全設置,你就可以刪除它,並且你將無法找到它無法執行的任何東西。

使用``系統執行,作為follows,執行如果你在這是因為在使用運行 ruby 或者廚師 and:


`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath('mydocuments')`

命令用於獲取"兌換文稿"文件夾。

-ExecutionPolicy Unrestricted 做的把戲。

我希望對其他人有幫助。

...