[英]PowerShell says "execution of scripts is disabled on this system."
我正在嘗試運行一個cmd
文件,該文件從cmd.exe
調用 PowerShell 腳本,但出現此錯誤:
無法加載
Management_Install.ps1
,因為在此系統上禁用了腳本的執行。
我運行了這個命令:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
當我從 PowerShell 運行Get-ExecutionPolicy
時,它返回Unrestricted
。
Get-ExecutionPolicy
Output:
Unrestricted
cd "C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts" powershell.\Management_Install.ps1 1
警告:運行 x86 PowerShell...
文件
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1
無法加載,因為在此系統上禁用了腳本的執行。 有關更多詳細信息,請參閱“get-help about_signing
”。在行:1 字符:25
.\Management_Install.ps1
<<<< 1
CategoryInfo: NotSpecified: (:) [], PSSecurityException
FullyQualifiedErrorId:RuntimeException
C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> 暫停
按任意鍵繼續。 . .
系統是Windows Server 2008 R2。
我究竟做錯了什么?
如果您使用的是Windows Server 2008 R2,則有一個x64和x86版本的 PowerShell,兩者都必須設置其執行策略。 您是否在兩台主機上都設置了執行策略?
作為管理員,您可以通過在 PowerShell 窗口中鍵入以下內容來設置執行策略:
Set-ExecutionPolicy RemoteSigned
有關詳細信息,請參閱使用 Set-ExecutionPolicy Cmdlet 。
完成后,您可以使用以下命令將策略設置回其默認值:
Set-ExecutionPolicy Restricted
您可能會看到一個錯誤:
Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.
To change the execution policy for the default (LocalMachine) scope,
start Windows PowerShell with the "Run as administrator" option.
To change the execution policy for the current user,
run "Set-ExecutionPolicy -Scope CurrentUser".
因此,您可能需要像這樣運行命令(如注釋中所示):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
您可以通過在運行 PowerShell 時添加-ExecutionPolicy Bypass
來繞過單個文件的此策略
powershell -ExecutionPolicy Bypass -File script.ps1
我遇到了類似的問題,並注意到Windows Server 2012上的默認cmd
正在運行 x64 。
對於Windows 11 、 Windows 10 、 Windows 7 、 Windows 8 、 Windows Server 2008 R2或Windows Server 2012 ,以管理員身份運行以下命令:
x86 (32 位)
打開C:\Windows\SysWOW64\cmd.exe
運行命令powershell Set-ExecutionPolicy RemoteSigned
x64 (64 位)
打開C:\Windows\system32\cmd.exe
運行命令powershell Set-ExecutionPolicy RemoteSigned
您可以使用檢查模式
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
參考:
MSDN - Windows PowerShell 執行策略
Windows - 32bit vs 64bit 目錄解釋
大多數現有答案都解釋了How ,但很少解釋Why 。 在你在互聯網上執行來自陌生人的代碼之前,尤其是禁用安全措施的代碼之前,你應該准確地了解你在做什么。 所以這里有更多關於這個問題的細節。
從 TechNet關於執行策略頁面:
Windows PowerShell 執行策略允許您確定 Windows PowerShell 加載配置文件和運行腳本的條件。
PowerShell Basics - Execution Policy and Code Signing列舉的好處是:
- 執行控制 - 控制執行腳本的信任級別。
- Command Highjack - 防止在我的路徑中注入命令。
- 身份- 腳本是由我信任的開發人員創建和簽名的和/或使用我信任的證書頒發機構的證書簽名的。
- 完整性- 惡意軟件或惡意用戶無法修改腳本。
要檢查您當前的執行策略,您可以運行Get-ExecutionPolicy
。 但你可能在這里是因為你想改變它。
為此,您將運行Set-ExecutionPolicy
cmdlet。
在更新執行策略時,您需要做出兩個主要決定。
Restricted
† - 本地、遠程或下載的腳本都不能在系統上執行。AllSigned
- 運行的所有腳本都需要進行數字簽名。RemoteSigned
- 所有遠程腳本 (UNC) 或下載的都需要簽名。Unrestricted
- 不需要任何類型的腳本的簽名。LocalMachine
† - 執行策略影響計算機的所有用戶。CurrentUser
- 執行策略僅影響當前用戶。Process
- 執行策略僅影響當前的 Windows PowerShell 進程。† = 默認
例如:如果您想僅為 CurrentUser 將策略更改為 RemoteSigned,您將運行以下命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
注意:要更改執行策略,您必須以管理員身份運行 PowerShell 。 如果您處於常規模式並嘗試更改執行策略,您將收到以下錯誤:
拒絕訪問注冊表項“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”。 要更改默認 (LocalMachine) 范圍的執行策略,請使用“以管理員身份運行”選項啟動 Windows PowerShell。
如果您想加強對尚未從 Internet 下載的您自己的腳本(或至少不包含 UNC 元數據)的內部限制,您可以強制該策略僅運行簽名的 sripts。 要簽署您自己的腳本,您可以按照 Scott Hanselman 關於簽署 PowerShell 腳本的文章中的說明進行操作。
注意:大多數人在打開 Powershell 時可能會遇到此錯誤,因為 PS 在啟動時嘗試做的第一件事是執行您的用戶配置文件腳本,該腳本設置您喜歡的環境。
該文件通常位於:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
您可以通過運行 powershell 變量找到確切位置
$profile
如果配置文件中沒有您關心的內容,並且不想對您的安全設置大驚小怪,您可以將其刪除,powershell 將找不到任何它無法執行的內容。
我們可以通過以下命令獲取當前ExecutionPolicy
的狀態:
Get-ExecutionPolicy
默認情況下它是Restricted 。 為了允許執行 PowerShell 腳本,我們需要將此 ExecutionPolicy 設置為Unrestricted或Bypass 。
我們可以使用以下任何 PowerShell 命令將當前用戶的策略設置為Bypass
:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force
不受限制的策略會加載所有配置文件並運行所有腳本。 如果您運行從 Internet 下載的未簽名腳本,則會在運行前提示您獲得許可。
而在繞過策略中,沒有任何內容被阻止,並且在腳本執行期間沒有警告或提示。 Bypass ExecutionPolicy
比Unrestricted
更寬松。
在腳本之前運行此命令也可以解決問題:
Set-ExecutionPolicy Unrestricted
在 Windows 7 中:
轉到開始菜單並搜索“Windows PowerShell ISE”。
右鍵單擊 x86 版本並選擇“以管理員身份運行”。
在頂部,粘貼Set-ExecutionPolicy RemoteSigned
; 運行腳本。 選擇“是”。
對 64 位版本的 Powershell ISE(非 x86 版本)重復這些步驟。
我只是澄清@Chad Miller 暗示的步驟。 謝謝乍得!
如果您處於非管理員的環境中,您可以為您設置執行策略,並且不需要管理員。
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
或者
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"
您可以在幫助條目中閱讀所有相關信息。
Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
RemoteSigned:您自己創建的所有腳本都將運行,並且從 Internet 下載的所有腳本都需要由受信任的發布者簽名。
好的,只需鍵入以下內容即可更改策略:
Set-ExecutionPolicy RemoteSigned
我使用的是Windows 10 ,無法運行任何命令。 給我一些線索的唯一命令是:
[x64]
- 打開 C:\Windows\SysWOW64\cmd.exe [以管理員身份]
- 運行命令> powershell Set-ExecutionPolicy Unrestricted
但這沒有用。 這是有限的。 可能是 Windows10 的新安全策略。 我有這個錯誤:
Set-ExecutionPolicy:Windows PowerShell 成功更新了您的執行策略,但該設置被在更具體范圍內定義的策略覆蓋。 由於覆蓋,您的 shell 將保留其當前有效的執行策略...
所以我找到了另一種方法(解決方案):
現在打開 PowerShell 並享受 ;)
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
使用這個命令
sou 應該運行這個命令
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
Win + R並輸入復制粘貼命令並按OK :
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
並執行你的腳本。
然后還原更改,例如:
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
打開 Windows PowerShell
命令並運行以下query
以更改ExecutionPolicy
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
如果它要求確認更改,請按“Y”並按 Enter。
在 Windows 中打開命令提示符,如果問題僅出在 powershell 上,請使用以下命令,
powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"
設置執行策略是特定於環境的。 如果您嘗試從正在運行的 x86 ISE執行腳本,則必須使用 x86 PowerShell 來設置執行策略。 同樣,如果您正在運行 64 位 ISE,則必須使用 64 位 PowerShell 設置策略。
你可以試試這個並選擇“全部”選項
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
現在運行你正在使用的運行命令..相信這個應用程序將運行..享受:)
您也可以使用以下命令繞過它:
PS > powershell Get-Content .\test.ps1 | Invoke-Expression
您還可以閱讀 Scott Sutherland 撰寫的這篇文章,該文章解釋了在您沒有管理員權限的情況下繞過 PowerShell Set-ExecutionPolicy
的 15 種不同方法:
我也遇到過類似的問題,試試這個希望它對某人有所幫助因為我使用的是 Windows,所以按照下面給出的步驟以管理員身份打開命令提示符,然后轉到此路徑
C:\Users\%username%\AppData\Roaming\npm\
在此文件夾(dir)中查找文件 ng.ps1,然后將其刪除(del ng.ps1)
您也可以在此之后清除 npm 緩存,盡管它也應該在沒有此步驟的情況下工作。 希望它對我有用。
希望能幫助到你
在 PowerShell ISE編輯器中,我發現運行以下行首先允許腳本。
Set-ExecutionPolicy RemoteSigned -Scope Process
Set-ExecutionPolicy RemoteSigned
在powershell中以管理員模式執行此命令即可解決問題。
在窗口 10 中:
如果你不是管理員,你可以使用這個
powershell Set-ExecutionPolicy -Scope CurrentUser
cmdlet Set-ExecutionPolicy at command pipeline position 1 為以下參數提供值: ExecutionPolicy: RemoteSigned
它像魅力一樣解決了我的問題!
在 PowerShell 2.0 中,執行策略默認設置為禁用。
從那時起,PowerShell 團隊做了很多改進,他們相信用戶在運行腳本時不會破壞太多東西。 因此,從 PowerShell 4.0 開始,它默認啟用。
在您的情況下,從 PowerShell 控制台鍵入Set-ExecutionPolicy RemoteSigned
並說是。
當我嘗試運行Set-ExecutionPolicy RemoteSigned
時,我收到另一個警告
我用這個命令解決了
Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false
Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false
以管理員身份打開 PowerShell。 運行以下命令
Set-ExecutionPolicy RemoteSigned
詢問時輸入 Y!
我發現這條線路最適合我的一台Windows Server 2008 R2 服務器。 在我的 PowerShell 腳本中,如果沒有這一行,其他幾個人沒有問題:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
轉到注冊表路徑HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
並將ExecutionPolicy
設置為RemoteSigned
。
我今天遇到了同樣的問題。 64 位執行策略不受限制,而 32 位執行策略受到限制。
以下是僅遠程更改 32 位策略的方法:
Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
以管理員身份打開Powershell控制台,然后設置執行策略
Set-ExecutionPolicy -ExecutionPolicy Remotesigned
幾個答案指向執行策略。 然而,有些事情也需要“runas 管理員”。 這是最安全的,因為執行策略不會永久更改,並且可以通過管理員限制。 與 schedtask 一起使用以啟動批處理:
runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1
來自上面的 Jack Edmonds 和帖子的 Peter Mortensen / Dhana 如何從命令提示符以“以管理員身份運行”運行應用程序?
您可以使用一種特殊的方式繞過它:
Get-Content "PS1scriptfullpath.ps1" | Powershell -NoProfile -
它將 powershell 腳本的內容通過管道傳輸到 powershell.exe 並繞過執行策略執行它。
刪除 C:\Users[您的用戶]\AppData\Roaming\npm 中的 ng.ps1 文件
並刪除 C:\Users\USER\AppData\Roaming 中的 npm 緩存文件
現有答案中有大量信息,但讓我嘗試系統概述:
PowerShell 的有效執行策略適用於:
.ps1
)進行腳本處理,而不是對cmdlet的調用(例如Get-ChildItem
)。 在 Windows 的工作站版本上,默認情況下禁用腳本文件執行(策略Restricted
),需要對策略進行持久修改以啟用它,或者在調用 PowerShell 時通過-ExecutionPolicy
參數進行僅當前進程的修改CLI , powershell.exe
( Windows PowerShell版) pwsh.exe
( PowerShell(核心)版)。
執行策略單獨維護:
對於兩個PowerShell版本:
適用於32 位和 64 位版本的Windows PowerShell (均已預裝)
LocalMachine
范圍是特定於位的。對於 PowerShell 的給定版本/位數組合,可以在多個范圍內設置執行策略,但只有一個有效策略,基於優先規則 - 見下文。
在Windows 上的 PowerShell 中,默認情況下,在 Windows 的工作站版本中禁用腳本文件執行(在 Unix 上,執行策略不適用); 也就是說,Windows 工作站版的默認執行策略是Restricted
,而服務器版的默認執行策略是RemoteSigned
; 有關所有可用策略的描述,請參閱概念about_Execution_Policies幫助主題。
要設置允許腳本執行的(本地)策略,請使用Set-ExecutionPolicy
。 Set-ExecutionPolicy
可以針對三個范圍使用-Scope
參數(見下文); 更改LocalMachine
范圍需要提升(以管理員身份運行) 。
Undefined
在安全性和便利性之間提供平衡的常用策略是RemoteSigned
,它允許本地腳本(包括來自網絡共享的腳本)在不包含簽名的情況下執行,同時要求對從 Internet下載的腳本進行簽名(假設下載機制標記了此類作為源自 Internet 的腳本,默認情況下 Web 瀏覽器會執行此操作)。 例如,要將當前用戶的執行策略設置為RemoteSigned
,請運行以下命令:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
PowerShell CLI ( powershell.exe
for Windows PowerShell , pwsh.exe
for PowerShell (Core) , v6+) 也接受特定於進程的-ExecutionPolicy <policy>
參數,該參數通常用於臨時策略覆蓋(僅用於進程正在創建,相當於Set-ExecutionPolicy -Scope Process ..
); 例如:
pwsh.exe -ExecutionPolicy RemoteSigned -File someScript.ps1
重要:
執行策略也可以通過組策略對象 (GPO)設置,在這種情況下,它們不能使用Set-ExecutionPolicy
或通過 CLI 更改或覆蓋。
可以在各種范圍內設置執行策略,哪個有效取決於它們的優先級(運行Get-ExecutionPolicy
-List
以查看所有范圍及其各自的策略),按降序排列:
MachinePolicy
(通過 GPO;不能在本地覆蓋)UserPolicy
(通過 GPO;不能在本地覆蓋)Process
(僅限當前進程;通常通過 CLI 臨時設置)CurrentUser
(由Set-ExecutionPolicy
)LocalMachine
(由Set-ExecutionPolicy
,具有管理員權限)要解決此問題,我們必須設置執行策略,以便 PowerShell 腳本在特定機器上運行。 方法如下:
通過選擇“以管理員身份運行”打開 PowerShell 控制台並使用以下命令設置執行策略:Set-ExecutionPolicy RemoteSigned 在提示繼續時鍵入“Y”
學分: https ://www.sharepointdiary.com/2014/03/fix-for-powershell-script-cannot-be-loaded-because-running-scripts-is-disabled-on-this-system.html
以“ Run as administrator
身份運行”運行cmd
或powershell
在我的例子中,它發生是因為我使用 PowerShell,我應該使用 cmd 提示符
“cannot be loaded because running scripts is disabled on this system”的解決方案:如何啟用運行腳本在這個系統上被禁用錯誤? 要解決此問題,我們必須設置執行策略,以便 PowerShell 腳本在特定機器上運行。 這里是允許PowerShell腳本執行:
打開 cmd 而不是 powershell。 這對我有幫助...
運行Set-ExecutionPolicy RemoteSigned
命令
也發生在我身上。 對我來說,解決方案很簡單。 我沒有意識到命令提示符中運行 Nodemon 的路徑與我安裝軟件包的位置不同。
所以它給了我你提到的同樣的錯誤。
改變我的路徑解決了它。
以管理員身份打開 PowerShell 窗口。 它會起作用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.