8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

PowerShell 说“此系统上已禁用脚本执行”。

bachts 2月前

346 0

我正在尝试运行一个从 cmd.exe 调用 PowerShell 脚本的 cmd 文件,但出现此错误:无法加载 Management_Install.ps1,因为此脚本的执行已被禁用

我正在尝试运行一个 cmd 从 调用 PowerShell 脚本的文件 cmd.exe ,但出现了以下错误:

Management_Install.ps1 无法加载,因为此系统已禁用脚本的执行。

我运行了这个命令:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

当我 Get-ExecutionPolicy 从 PowerShell 运行时,它返回 Unrestricted .

Get-ExecutionPolicy

输出:

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

  • p10

    • 【【p11】】

    • 【【p12】】

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts> 暂停

按任意键继续 。 。 。


系统是 Windows Server 2008 R2。

我究竟做错了什么?

帖子版权声明 1、本帖标题:PowerShell 说“此系统上已禁用脚本执行”。
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由bachts在本站《powershell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 值得指出的是,执行策略具有多个范围,以不同的方式运行 PowerShell 可以获得不同的策略。要查看策略列表,请运行

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

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

    Set-ExecutionPolicy RemoteSigned
    

    有关详细信息,请参阅 使用 Set-ExecutionPolicy CmdletFor .

    完成后,您可以使用以下命令将策略设置回其默认值:

    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
    
  • 如果您想将权限恢复到原来的状态,Set-ExecutionPolicy Restricted 似乎是撤消它的方法:technet.microsoft.com/en-us/library/ee176961.aspx。@Jack Edmonds 的临时绕过方法对我来说看起来更安全:powershell -ExecutionPolicy ByPass -File script.ps1

  • Set-ExecutionPolicy RemoteSigned 不能是脚本的第一行。如果是,请突出显示它,并在运行脚本的其余部分之前仅运行选定的 INITIALLY。

  • 我在 SF 网站上看到了类似的问题,\'SQL Server 中的 Powershell 执行策略“于 2014 年 10 月 10 日提出。那里的答案包括 Get-ExecutionPolicy -List,它帮助我查看了不同的范围。cmd Get-ExecutionPolicy 不会显示所有范围。Import-Module SQLPS 现在可以使用以下更改的策略:{Undefined- Process,MachinePolicy,UserPolicy,};{RemoteSigned- CurrentUser, LocalMachine}。

  • 如果我这样做,更改是否只持续当前 PowerShell 的持续时间?还是比这更长?

  • @SharpC,Undefined 将给定范围内的策略恢复为默认值;例如,Set-ExecutionPolicy -Scope CurrentUser Undefined -Force。虽然在 Windows 的工作站版本上使用 Restricted 具有相同的效果,但请注意 - 至少现在 - 服务器版本默认为 RemoteSigned。

  • 在运行 PowerShell 时 -ExecutionPolicy Bypass 添加来绕过单个文件的此策略

    powershell -ExecutionPolicy Bypass -File script.ps1
    
  • 引用 10

    如果您使用的是非管理员帐户,这也非常方便。我在任务栏上创建了 %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass 的快捷方式。

  • 这对我来说不起作用,我得到的权限被拒绝,就像我正常调用它一样。通过执行 type script.ps1 | powershell 从 .bat 调用 ps1 - 确实有效。

  • 执行策略的目的是防止人们双击 .ps1 并意外运行他们不想运行的东西。这种情况会发生在 .bat 文件中

  • 当我使用 winsw 将 ps1 文件作为服务运行时,这对我来说不起作用。我在日志中收到相同的错误。

  • 默认 cmd 上的 Windows Server 2012 运行是 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

    您可以使用以下方式检查模式

    • 在CMD中: echo %PROCESSOR_ARCHITECTURE%
    • 在 Powershell 中: [Environment]::Is64BitProcess

    参考:
    MSDN - Windows PowerShell 执行策略
    Windows - 32 位与 64 位目录说明

  • 是否可以通过 powershell 运行这些并将参数传递给 cmd 可执行文件以实现自动化配置?

  • @openCivilisation 在执行 powershell 之前,您不能使用上述命令运行 .cmd 文件吗?如果需要,您也可以在策略级别进行设置,尽管我没有这样做。

  • 现有的大多数答案都解释了“ 如何” ,但很少有答案解释了“ 为什么” 。在你执行互联网上陌生人的代码(尤其是禁用安全措施的代码)之前,你应该确切地了解你在做什么。所以这里对这个问题更详细一点。

    来自 TechNet 关于执行策略页面 :

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

    PowerShell 基础知识 - 执行策略和代码签名 列举了其好处 ,包括:

    • 执行控制 - 控制执行脚本的信任级别。
    • 命令劫持 - 防止在我的路径中注入命令。
    • 身份 - 该脚本是否由我信任的开发人员创建和签名,和/或使用我信任的证书颁发机构的证书签名。
    • 完整性 ——脚本不能被恶意软件或恶意用户修改。

    要检查当前的执行策略,可以运行 Get-ExecutionPolicy 。但你来这里可能是因为你想改变它。

    为此,您需要运行 Set-ExecutionPolicy cmdlet。

    更新执行策略时,您需要做出两个重要决定。

    执行策略类型:

    • 受限 - 系统上无法执行本地、远程或下载的脚本。
    • AllSigned- 所有运行的脚本都需要经过数字签名。
    • RemoteSigned- 所有远程脚本(UNC)或下载都需要签名。
    • 不受限制 - 不需要任何类型的脚本签名。

    新变更的范围

    • LocalMachine - 执行策略影响计算机的所有用户。
    • CurrentUser- 执行策略仅影响当前用户。
    • 进程 - 执行策略仅影响当前 Windows PowerShell 进程。

    † = 默认

    例如 :如果您想要将策略更改为仅针对 CurrentUser 的 RemoteSigned,您可以运行以下命令:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    注意 :为了更改执行策略,您必须 以管理员身份运行 PowerShell 。如果您处于常规模式并尝试更改执行策略,您将收到以下错误:

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

    如果您想加强对未从互联网下载的自己的脚本(或至少不包含 UNC 元数据)的内部限制,您可以强制策略仅运行已签名的脚本。要对自己的脚本进行签名,您可以按照 Scott Hanselman 的“ 签名 PowerShell 脚本” .

    注意 :大多数人打开 PowerShell 时都可能会遇到此错误,因为 PowerShell 启动时尝试做的第一件事就是执行您的用户配置文件脚本,按照您的喜好设置您的环境。

    该文件通常位于:

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

    您可以通过运行 PowerShell 变量来找到确切的位置

    $profile
    

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

  • 我认为需要注意的是,虽然执行策略是一种安全措施,但它并不是为了阻止用户执行 PowerShell 代码。执行策略旨在保护您的脚本并确定谁编写、修改或批准了这些脚本,仅此而已。使用 Get-Content .\MyFile.ps1 | powershell.exe -NoProfile - 等简单方法绕过执行策略很简单。

  • 但是,既然存在 -ExecutionPolicy ByPass,那么这个策略的目的是什么呢?它只是为了防止用户意外打开 powershell 控制台并运行恶意脚本吗?如果攻击者想绕过这个问题,难道不能只使用可执行文件或批处理脚本吗?即使在阅读了 @BaconBits 的评论后,我也不太确定这个策略是为了防止什么情况……

  • 引用 20

    @Ajedi32 假设我有一个在网络共享上运行脚本的任务。当我调用我的脚本时,我希望我的进程验证该脚本是否已签名。我希望我的代码能够仔细检查我要运行的脚本是否是我信任的代码。我不在乎你是否可以运行我的代码。阻止这是访问权限的工作。我只是想防止你让我运行我没有编写的代码。访问权限意味着操作系统会阻止你在登录时修改我的代码。代码签名和执行策略意味着当我运行我的脚本时它没有被修改。

返回
作者最近主题: