Powershell 3.0:保存工作脚本后,如果我关闭然后重新打开脚本,当我尝试运行它时会收到一条错误消息

Posted

技术标签:

【中文标题】Powershell 3.0:保存工作脚本后,如果我关闭然后重新打开脚本,当我尝试运行它时会收到一条错误消息【英文标题】:Powershell 3.0: After I save a working script, if I close and then reopen the script I receive an error message when I try to run it 【发布时间】:2016-01-20 21:19:42 【问题描述】:

我刚刚写了这段代码:

Get-ChildItem 'R:\Source\Path' |
 Where-Object  $_.Name -notlike '*_*'  |
 Select-Object -ExpandProperty Name > 'C:\Destination\Path\Test.txt' |
 Clear-Host
 Invoke-Item 'C:\Destination\Path\Test.txt'

效果很好。我保存了代码,然后关闭了电源外壳。当我重新打开 powershell 并运行这个特定程序时,它产生了以下错误消息:

文件 C:\Users\Galen\Powershell Code\InvokeItem.ps1 无法加载 因为在此系统上禁用了运行脚本。更多 信息,请参阅 about_Execution_Policies,网址为 http://go.microsoft.com/fwlink/?LinkID=135170。 + CategoryInfo : SecurityError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnauthorizedAccess

我是这台计算机的管理员。发生了什么?

【问题讨论】:

您在运行 Get-ExecutionPolicy 时看到了什么?您是否阅读了错误中明确提到的帮助文件? 我做到了,作为一个非常新的 powershell 用户,它没有多大意义。如果我复制那个确切的代码并将其粘贴到一个新的代码环境中,它运行得非常好。 运行 G-EP 返回未定义。 First, try reading the error message。正如 EBGreen 指出的那样,您需要阅读文档。 是的,对不起,比尔,我确实阅读了错误消息。我不是故意暗示我没有。我阅读了错误消息,但正如我之前所说,它对我来说没有多大意义。显然我是受限用户,尽管拥有管理员身份,但我无法更改我的执行策略。忽略这一点,根据文档,受限用户无法运行 .ps1 脚本。但是我可以运行 .ps1 脚本,除非在我保存它们之后。脚本保存前后有何不同? 【参考方案1】:

您的 ExecutionPolicy 设置为什么?

PS C:\Users\Me\Desktop> ExecutionPolicy

如果它是 Restricted ,那么它只在交互模式下运行 PowerShell,这就是它之前运行的原因。

如果您是管理员,请尝试将其设置为无限制并执行您的脚本

PS C:\Users\Me\Desktop> Set-ExecutionPolicy Unrestricted

更多信息 - Using the Set-ExecutionPolicy

【讨论】:

你能详细解释一下你所说的交互模式是什么意思吗?在文献中它说受限用户不能运行 Windows Powershell 配置文件 (.ps1)。但是我的脚本文件不是 .ps1 吗?保存后有什么不同? 这意味着您只能在powershell控制台中执行命令,但如果您将其保存在.ps1中并尝试运行它,它将无法运行。那就是限制政策。您是否尝试将其更改为 Unrestricted ? 我确实尝试过更改它——我是计算机上的管理员(我通过检查管理员组确认了这一点),但是当我尝试将我的策略更改为不受限制时,我收到一条错误消息。具体来说:拒绝访问注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”。 我以前没有遇到过,但我在 microsoft Forum 上找到了这些步骤 * 运行:regedt32 * 转到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell * 右键单击​​ > 权限 * 选择并添加您的帐户,授予它“完全控制”权限 嗯...奇怪。我按照您的指示进入并编辑了权限,但更改权限仍然没有运气。我什至重新启动计算机只是为了确保更改生效。

以上是关于Powershell 3.0:保存工作脚本后,如果我关闭然后重新打开脚本,当我尝试运行它时会收到一条错误消息的主要内容,如果未能解决你的问题,请参考以下文章

我想请教一下,powershell的脚本之间如何传递全局变量。

如何用Powershell脚本实现自动移除离职用户的所属组并保存日志

脚本powershell后当前用户的弹出消息

powershell 具有已保存信用的PowerShell脚本模板

windows主机开启winrm端口powershell脚本

powershell Powershell脚本,用于从已编译的twine游戏中删除保存加密代码。