PowerShell说“在这个系统上禁用了脚本的执行。”

时间:2010-10-27 21:39:29

标签: powershell windows-server-2008-r2

我正在尝试运行从cmd.exe调用脚本的文件,我收到以下错误:

  无法加载

Management_Install.ps1,因为在此系统上禁用了脚本的执行。

我跑了

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

当我从运行Get-ExecutionPolicy时,我得到了Unrestricted

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\> powershell .\Management_Install.ps1 1

WARNING: Running 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\> PAUSE

Press any key to continue . . .

系统是Windows Server 2008R2。

我做错了什么?

34 个答案:

答案 0 :(得分:1902)

如果您使用的是Windows Server 2008 R2,则有一个 x64 x86 版本的PowerShell,这两个版本都必须设置其执行策略。您是否在两台主机上设置了执行策略?

作为管理员,您可以通过在PowerShell窗口中键入以下内容来设置执行策略:

Set-ExecutionPolicy RemoteSigned

有关详细信息,请参阅 Using the Set-ExecutionPolicy Cmdlet

答案 1 :(得分:615)

您可以在运行PowerShell时添加-ExecutionPolicy ByPass来绕过此策略

powershell -ExecutionPolicy ByPass -File script.ps1

答案 2 :(得分:117)

我遇到了类似的问题,并注意到Windows Server 2012上的默认cmd正在运行x64。

对于 Windows 7 Windows 8 Windows 10 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

您可以使用

检查模式
  • 在CMD中:echo %PROCESSOR_ARCHITECTURE%
  • 在Powershell中:[Environment]::Is64BitProcess

<强>参考文献:
MSDN - Windows PowerShell execution policies
Windows - 32bit vs 64bit directory explanation

答案 3 :(得分:109)

现有的大多数答案都解释了 How ,但很少解释 Why 。在你从互联网上的陌生人执行代码之前,特别是禁用安全措施的代码之前,你应该完全理解你在做什么。所以这里有关于这个问题的更多细节。

来自TechNet About Execution Policies Page

  

Windows PowerShell执行策略允许您确定Windows PowerShell加载配置文件和运行脚本的条件。

PowerShell Basics - Execution Policy and Code Signing列举的好处是:

  
      
  • 执行控制 - 控制执行脚本的信任级别。
  •   
  • 命令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 As Adminstrator 。 如果您处于常规模式并尝试更改执行策略,则会出现以下错误:

  

拒绝访问注册表项'HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell'。要更改默认(LocalMachine)范围的执行策略,请使用“以管理员身份运行”选项启动Windows PowerShell。

如果要加强对尚未从Internet下载的脚本的内部限制(或至少不包含UNC元数据),可以强制策略仅运行签名的sripts。要签署自己的脚本,您可以按照Scott Hanselman关于Signing PowerShell Scripts的文章的说明进行操作。

注意:大多数人在打开Powershell时都可能会收到此错误,因为PS在启动时尝试做的第一件事是执行您的用户配置文件脚本来设置您喜欢它的环境。

该文件通常位于:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

您可以通过运行powershell变量

找到确切的位置
$profile

如果配置文件中没有您关心的任何内容,并且不想对您的安全设置大惊小怪,您可以删除它,而PowerShell将找不到任何无法执行的内容。

答案 4 :(得分:36)

在Windows 7中:

转到“开始”菜单,然后搜索“Windows PowerShell ISE”。

右键单击x86版本,然后选择“以管理员身份运行”。

在顶部,粘贴Set-ExecutionPolicy RemoteSigned;运行脚本。选择“是”。

对64位版本的Powershell ISE也重复这些步骤(非x86版本)。

我只是澄清了@Chad Miller所暗示的步骤。谢谢Chad!

答案 5 :(得分:35)

在脚本也解决问题之前运行此命令:

set-executionpolicy unrestricted

答案 6 :(得分:29)

如果您所在的环境中不是管理员,则可以仅为您设置执行策略,并且不需要管理员。

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

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

您可以在帮助条目中阅读所有相关内容。

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

答案 7 :(得分:23)

RemoteSigned:您自己创建的所有脚本都将运行,从Internet下载的所有脚本都需要由受信任的发布者签名。

好的,只需输入以下内容即可更改政策:

Set-ExecutionPolicy RemoteSigned

答案 8 :(得分:21)

我们可以通过以下命令获取当前UPDATE [master].[dbo].[TRY] SET Target_Hire_Date = CONVERT(VARCHAR(20), [YOUR-DATE-COLUMN], 103) 的状态:

ExecutionPolicy

默认情况下,受限制。要允许执行PowerShell脚本,我们需要将此ExecutionPolicy设置为绕过不受限制

我们可以使用以下任何PowerShell命令将当前用户的策略设置为Get-ExecutionPolicy; Bypass

Unrestricted

Unrestricted 策略加载所有配置文件并运行所有脚本。如果您运行从Internet下载的未签名脚本,则会在运行之前提示您获得权限。

绕过策略中,没有任何内容被阻止,并且在脚本执行期间没有警告或提示。绕过Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force; Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force; ExecutionPolicy更放松。

答案 9 :(得分:18)

我正在使用 Windows 10 ,无法运行任何命令。给我一些线索的唯一命令是:

[64]

  
      
  1. 打开C:\ Windows \ SysWOW64 \ cmd.exe [以管理员身份]
  2.   
  3. 运行命令&gt; powershell Set-ExecutionPolicy Unrestricted
  4.   

但是这没用。它很有限。可能是Windows10的新安全策略。我有这个错误:

  

Set-ExecutionPolicy:Windows PowerShell已成功更新执行策略,但该设置被更具体范围内定义的策略覆盖。由于覆盖,您的shell将保留其当前有效的执行策略...

所以我找到了另一种方式(解决方案):

  1. 打开运行命令/控制台( Win + R
  2. 类型: gpedit.msc Group Policy编辑)
  3. 浏览本地计算机政策 - &gt; 计算机配置 - &gt; 管理模板 - &gt; Windows组件 - &gt; Windows Powershell
  4. 启用“启用脚本执行
  5. 根据需要设置策略。我将我设置为“允许所有脚本”。
  6. 现在打开PowerShell并享受;)

答案 10 :(得分:15)

  1. 以管理员身份打开powershell
Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

使用此命令

答案 11 :(得分:9)

设置执行策略是特定于环境的。如果您尝试从正在运行的x86 ISE执行脚本,则必须使用x86 PowerShell来设置执行策略。同样,如果您运行的是64位ISE,则必须使用64位PowerShell设置策略。

答案 12 :(得分:8)

  1. 打开运行命令/控制台(Win + R) 输入: gpedit。 msc (组策略编辑器)
  2. 浏览到本地计算机策略-> 计算机配置-> 管理模板-> Windows组件-> Windows Powershell。
  3. 启用打开脚本执行” 根据需要设置策略。 我将我的设置为“允许所有脚本”

现在运行您所使用的运行命令。。相信此应用程序将运行。。享受:)

答案 13 :(得分:7)

我也遇到过类似的问题,请尝试这一希望对某人有所帮助 当我使用Windows时,请遵循以下步骤 以管理员身份打开命令提示符,然后转到此路径

C:\Users\%username%\AppData\Roaming\npm\

在此文件夹(目录)中查找文件ng.ps1。 然后将其删除(del ng.ps1)

您也可以在此之后清除npm缓存,尽管它也可以在没有此步骤的情况下工作。 希望对我有用。

希望有帮助

答案 14 :(得分:7)

您可以尝试此方法,然后选择“所有”选项

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

答案 15 :(得分:7)

赢取 + R 并输入复制粘贴命令,然后按确定

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

执行你的脚本。

然后还原更改:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"

答案 16 :(得分:7)

您也可以使用以下命令绕过此功能:

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

您还可以阅读Scott Sutherland撰写的这篇文章,其中解释了如果您没有管理员权限,可以绕过PowerShell Set-ExecutionPolicy的15种不同方法:

15 Ways to Bypass the PowerShell Execution Policy

答案 17 :(得分:5)

  1. 以管理员身份打开PowerShell并运行 Set-ExecutionPolicy -Scope CurrentUser
  2. 提供 RemoteSigned ,然后按Enter
  3. 运行 Set-ExecutionPolicy -Scope CurrentUser
  4. 提供 Unrestricted ,然后按Enter

答案 18 :(得分:3)

Set-ExecutionPolicy RemoteSigned

在powershell中以管理员模式执行此命令即可解决问题。

答案 19 :(得分:2)

尝试运行Set-ExecutionPolicy RemoteSigned

时,我又收到一条警告

我已使用此命令解决了

Set-ExecutionPolicy "RemoteSigned" -Scope Process -Confirm:$false

Set-ExecutionPolicy "RemoteSigned" -Scope CurrentUser -Confirm:$false

答案 20 :(得分:2)

以管理员身份打开Powershell控制台,然后设置执行策略

Set-ExecutionPolicy -ExecutionPolicy Remotesigned 

答案 21 :(得分:2)

在PowerShell ISE编辑器中,我发现运行以下行首先允许脚本。

Set-ExecutionPolicy RemoteSigned -Scope Process

答案 22 :(得分:1)

删除 C:\Users[your user]\AppData\Roaming\npm 中的 ng.ps1 文件

并删除 C:\Users\USER\AppData\Roaming 中的 npm 缓存文件

答案 23 :(得分:1)

您可以使用一种特殊的方法来绕过它:

Get-Content "PS1scriptfullpath.ps1" | Powershell-NoProfile -

它将Powershell脚本的内容通过管道传输到powershell.exe,并绕过执行策略来执行它。

答案 24 :(得分:1)

这解决了我的问题

打开Windows PowerShell命令并在查询下面运行以更改ExecutionPolicy

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

如果要求确认更改,请按“ Y”,然后按Enter。

答案 25 :(得分:1)

转到注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell并将ExecutionPolicy设置为RemoteSigned

答案 26 :(得分:1)

在PowerShell 2.0中,默认情况下将执行策略设置为禁用。

从那时起,PowerShell团队已经做了很多改进,他们相信用户在运行脚本时不会破坏很多东西。因此,从PowerShell 4.0开始,它默认启用。

在您的情况下,从PowerShell控制台键入cd My\ Documents并说“是”。

答案 27 :(得分:0)

打开cmd而不是powershell。这对我有帮助...

答案 28 :(得分:0)

如果你因为使用RubyChef并使用``系统执行来运行它,请按以下步骤执行:

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

该命令用于获取“MyDocuments”文件夹。

-ExecutionPolicy Unrestricted可以解决问题。

我希望它对其他人有帮助。

答案 29 :(得分:0)

我发现这条线路最适合我的Windows Server 2008 R2服务器之一。我的PowerShell脚本中没有这一行,其他几个没有问题:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process

答案 30 :(得分:0)

运行Set-ExecutionPolicy RemoteSigned命令

答案 31 :(得分:0)

由于许多答案都建议用户更改安全设置,因此最好包含将策略恢复为默认值的命令。

答案 32 :(得分:0)

我今天遇到了同样的问题。 64位执行策略不受限制,而32位受限制。

以下是如何远程更改32位策略:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}

答案 33 :(得分:0)

几个答案指向执行政策。但是有些事情也需要“runas管理员”。这是最安全的,因为执行策略没有永久性更改,并且可以超出管理员限制。使用schedtask启动批处理:

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

来自上面的Jack Edmonds和How to run an application as "run as administrator" from the command prompt?

的Peter Mortensen / Dhana