首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何运行自己的PowerShell脚本?不断犯错误

如何运行自己的PowerShell脚本?不断犯错误
EN

Stack Overflow用户
提问于 2022-09-22 12:26:47
回答 1查看 46关注 0票数 1

我试过:

代码语言:javascript
复制
    ##powershell.exe -executionpolicy -bypass
    ##Unblock-File -Path C:\SRM.ps1
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy  ByPass

不管我做什么,我都会犯这样的错误:

无法加载文件C:\SRM.ps1。文件C:\SRM.ps1没有数字签名。不能在当前系统上运行此脚本。

我在最新的windows 11版本上。使用Powershell ISE,我将作为管理员运行该应用程序。

还有什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-22 17:18:55

您的有效执行策略AllSigned,这意味着只允许运行加密署名脚本文件(*.ps1),而不管它们是本地文件还是从web下载的(也就是说,Unblock-File没有什么区别)。

正如奥拉夫所指出的,如果有效的执行策略阻止了脚本的执行,那么尝试从脚本内部更改执行策略就无法工作。

将PowerShell CLI (powershell.exe for Windows PowerShell,pwsh for PowerShell (Core) 7+)与-ExecutionPolicy Bypass一起使用原则上是正确的方法,如果目的是仅覆盖给定PowerShell会话(进程)的有效执行策略。

但是,从命令行/通过重写有效的执行策略

如果您的执行策略是通过GPO(组策略对象)(GPO(组策略对象))控制的,那么Set-执行策略 从根本上做了而不是工作。

若要确定计算机/用户帐户的执行策略是否由GPO控制,请检查Get-ExecutionPolicy -List的输出

如果作用域MachinePolicyUserPolicy的值显示Undefined以外的值,则GPO策略生效;如果这两个值与Undefined不同,则MachinePolicy值优先;输出顺序一般意味着优先级顺序。

换句话说:只有当Get-ExecutionPolicy的输出以以下两个条目开头时,才能使用命令行或Set-ExecutionPolicy覆盖执行策略。

代码语言:javascript
复制
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       ...
  CurrentUser       ...
 LocalMachine       ...

除了修改GPO以更改有效策略外,没有直接的解决方案,尽管您可以使用CLI和-Command提交命令,将脚本文件读入内存并通过Invoke-Expression执行(尽管这个cmdlet 一般应避免),但是对于依赖反射特性(如$PSCommandPath$PSScriptRoot )来确定自己的文件和目录路径的脚本来说,这是行不通的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73814620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档