仅在 ISE 中运行的 Powershell 脚本

Posted

技术标签:

【中文标题】仅在 ISE 中运行的 Powershell 脚本【英文标题】:Powershell script only running in ISE 【发布时间】:2020-09-09 14:52:21 【问题描述】:

在我将其打包为 EXE 之前,运行一个通过批处理文件启动并杀死/清理两个作业的脚本,在提升的 ISE 中效果很好,但在控制台或命令提示符中立即失败,并显示以下内容:

我整理的代码在这里:https://pastebin.com/FWaZD249

我测试了它:
    PS1 转 EXE,得到相同的结果 非升高的 ISE 相同结果 提升控制台相同的结果 提升 CMD 相同的结果 升高的 ISE 工作(仅在保存后?)

真的快要完成了,基本上,它只是一个小脚本,检查 5900 端口是否已建立连接,更新连接列表的形式,并在有新连接时发送一个小通知,它运行在我们的通过 TightVNC 远程共享屏幕的打印服务器计算机,因此操作员在鼠标开始移动时不会感到惊讶。

cmd批处理代码是这样的

powershell.exe -NoExit ". C:\Users\VS-Print-Server\Desktop\Userchecker.PS1"

【问题讨论】:

对于您的 cmd/批处理代码,%__AppDir__%WindowsPowerShell\v1.0\powershell.exe -NoExit -File "C:\Users\VS-Print-Server\Desktop\Userchecker.ps1" 是我的建议。我不知道你的 . 应该是做什么用的,因为它看起来好像你打算将它与当前目录相关,这应该已经是这种情况了。 我一直发现 ISE 执行和普通 powershell 执行之间的奇怪差异非常奇特。即使在这种情况下,我也很想知道为什么会发生这种情况:D 如果你运行“get-job FormJob |receive-job”你会得到一个错误异常吗? 在设置这些变量之前,您分别使用 $FormLib$LisLib 初始化作业 $job1job2。我假设您只需将第 1 行到第 30 行(Write-Verbose -Verbose 'Before:'; 之前的所有内容放在最后即可使其正常工作。 【参考方案1】:

正如我在评论中提到的:在设置/初始化这些变量之前,您分别使用 $FormLib$LisLib 初始化作业 $job1job2。将第 1 行到第 30 行(Write-Verbose -Verbose 'Before:' 之前的所有内容)移到最后应该可以正常工作。

【讨论】:

以上是关于仅在 ISE 中运行的 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

从 Powershell ISE 和 Windows 资源管理器运行脚本的不同行为

从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1

Windows7系统中的Windows PowerShell ISE和Windows PowerShell的区别以及作用?

仅在非交互式运行时如何从 Powershell 脚本返回退出代码

如何将所需的参数传递给 Powershell ISE 中的脚本?

如何在 Powershell ISE 中使用 sqlplus 运行 SQL 文件