簡體   English   中英

PowerShell 表示“在此系統上禁用腳本的執行。”

[英]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,則有一個x64x86版本的 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 11Windows 10Windows 7Windows 8Windows Server 2008 R2Windows Server 2012 ,以管理員身份運行以下命令:

x86 (32 位)
打開C:\Windows\SysWOW64\cmd.exe
運行命令powershell Set-ExecutionPolicy RemoteSigned

x64 (64 位)
打開C:\Windows\system32\cmd.exe
運行命令powershell Set-ExecutionPolicy RemoteSigned

您可以使用檢查模式

  • 在 CMD 中: echo %PROCESSOR_ARCHITECTURE%
  • 在 Powershell 中: [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 設置為UnrestrictedBypass

我們可以使用以下任何 PowerShell 命令將當前用戶的策略設置為Bypass

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force

不受限制的策略會加載所有配置文件並運行所有腳本。 如果您運行從 Internet 下載的未簽名腳本,則會在運行前提示您獲得許可。

而在繞過策略中,沒有任何內容被阻止,並且在腳本執行期間沒有警告或提示。 Bypass ExecutionPolicyUnrestricted更寬松。

在腳本之前運行此命令也可以解決問題:

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]

  1. 打開 C:\Windows\SysWOW64\cmd.exe [以管理員身份]
  2. 運行命令> powershell Set-ExecutionPolicy Unrestricted

但這沒有用。 這是有限的。 可能是 Windows10 的新安全策略。 我有這個錯誤:

Set-ExecutionPolicy:Windows PowerShell 成功更新了您的執行策略,但該設置被在更具體范圍內定義的策略覆蓋。 由於覆蓋,您的 shell 將保留其當前有效的執行策略...

所以我找到了另一種方法(解決方案):

  1. 打開運行命令/控制台( Win + R
  2. 類型: gpedit.msc組策略編輯器)
  3. 瀏覽到本地計算機策略->計算機配置->管理模板-> Windows 組件-> Windows Powershell
  4. 啟用“開啟腳本執行
  5. 根據需要設置策略。 我將我的設置為“允許所有腳本”。

現在打開 PowerShell 並享受 ;)

  1. 以管理員身份打開 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
  1. 打開運行命令/控制台( Win + R )類型: gpedit。 msc (組策略編輯器)
  2. 瀏覽到本地計算機策略->計算機配置->管理模板-> Windows 組件-> Windows Powershell。
  3. 啟用打開腳本執行”根據需要設置策略。 我將我的設置為“允許所有腳本”

現在運行你正在使用的運行命令..相信這個應用程序將運行..享受:)

您也可以使用以下命令繞過它:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

您還可以閱讀 Scott Sutherland 撰寫的這篇文章,該文章解釋了在您沒有管理員權限的情況下繞過 PowerShell Set-ExecutionPolicy的 15 種不同方法:

繞過 PowerShell 執行策略的 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

它像魅力一樣解決了我的問題!

對於Windows 11 ......確實很容易。 只需打開設置應用程序導航到隱私和安全隱私和安全圖片

單擊 For Developers 並滾動到底部並找到 PowerShell 選項,在該選項下選中“更改執行策略......遠程腳本”復選框。 開發者選項圖片

首先,您需要打開 powershell 並運行此命令。

set-ExecutionPolicy RemoteSigned -Scope CurrentUser

然后它會要求你確認。 輸入Y並按Enter

當您運行此命令時,您可以看到您的系統已將當前用戶的所有策略設置為遠程。 完成此過程需要幾秒鍾。 圖像將如下所示。

在此處輸入圖像描述

要檢查是否已設置執行策略,請鍵入: Get-ExecutionPolicy

如果它的設置輸出是這樣的:

在此處輸入圖像描述

  1. 以管理員身份打開 PowerShell 並運行Set-ExecutionPolicy -Scope CurrentUser
  2. 提供RemoteSigned並按 Enter
  3. 運行Set-ExecutionPolicy -Scope CurrentUser
  4. 提供Unrestricted並按 Enter

在 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

在 Windows 10 中,啟用名稱下的選項:“從任何來源安裝應用程序,包括松散文件。” 在此處輸入圖像描述

它為我解決了這個問題

以管理員身份打開 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 

如果您安裝了 git,只需使用 git bash。

在此處輸入圖像描述

如果您是因為使用RubyChef運行它並使用 `` 系統執行而在這里,請執行以下操作:

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

該命令用於獲取“MyDocuments”文件夾。

-ExecutionPolicy Unrestricted可以解決問題。

我希望它對其他人有幫助。

幾個答案指向執行策略。 然而,有些事情也需要“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上(即,在類 Unix平台(Linux、macOS)上不適用執行策略)

在 Windows 的工作站版本上,默認情況下禁用腳本文件執行(策略Restricted ),需要對策略進行持久修改以啟用它,或者在調用 PowerShell 時通過-ExecutionPolicy參數進行僅當前進程的修改CLIpowershell.exeWindows PowerShell版) pwsh.exePowerShell(核心)版)。

執行策略單獨維護

  • 對於兩個PowerShell版本

    • Windows PowerShell版本(其最新和最后一個版本是 v5.1.x)
    • 現代、跨平台、按需安裝的PowerShell (Core)版本 (v6+)。
  • 適用於32 位和 64 位版本Windows PowerShell (均已預裝)

    • 注意:如果您要並排安裝 32 位和 64 位版本的PowerShell (Core) (這很不尋常),則只有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身份運行”運行cmdpowershell

在我的例子中,它發生是因為我使用 PowerShell,我應該使用 cmd 提示符

“cannot be loaded because running scripts is disabled on this system”的解決方案:如何啟用運行腳本在這個系統上被禁用錯誤? 要解決此問題,我們必須設置執行策略,以便 PowerShell 腳本在特定機器上運行。 這里是允許PowerShell腳本執行:

  1. 通過選擇“以管理員身份運行”打開 PowerShell 控制台並使用命令獲取執行策略:Get-ExecutionPolicy 以獲取應用的當前策略,例如“Restricted”。 在此處輸入圖像描述

  2. 使用以下命令設置執行策略:Set-ExecutionPolicy RemoteSigned

  3. 提示繼續時鍵入“Y”。

打開 cmd 而不是 powershell。 這對我有幫助...

運行Set-ExecutionPolicy RemoteSigned命令

也發生在我身上。 對我來說,解決方案很簡單。 我沒有意識到命令提示符中運行 Nodemon 的路徑與我安裝軟件包的位置不同。

所以它給了我你提到的同樣的錯誤。

改變我的路徑解決了它。

對於下載的文件,右鍵單擊 > 屬性在此處輸入圖像描述

然后單擊取消阻止,然后單擊確定。 然后運行 powershell 腳本,它就不再抱怨無法運行了。

管理員身份打開 PowerShell 窗口。 它會起作用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM