仅在 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
初始化作业 $job1
和 job2
。我假设您只需将第 1 行到第 30 行(Write-Verbose -Verbose 'Before:';
之前的所有内容放在最后即可使其正常工作。
【参考方案1】:
正如我在评论中提到的:在设置/初始化这些变量之前,您分别使用 $FormLib
和 $LisLib
初始化作业 $job1
和 job2
。将第 1 行到第 30 行(Write-Verbose -Verbose 'Before:'
之前的所有内容)移到最后应该可以正常工作。
【讨论】:
以上是关于仅在 ISE 中运行的 Powershell 脚本的主要内容,如果未能解决你的问题,请参考以下文章
从 Powershell ISE 和 Windows 资源管理器运行脚本的不同行为
从 Powershell ISE 中的另一个 PS1 脚本调用 PowerShell 脚本 PS1
Windows7系统中的Windows PowerShell ISE和Windows PowerShell的区别以及作用?
仅在非交互式运行时如何从 Powershell 脚本返回退出代码