【问题标题】:Script runs fine in ISE, but not in Powershell Console脚本在 ISE 中运行良好,但在 Powershell 控制台中运行良好
【发布时间】:2015-05-21 15:39:33
【问题描述】:

我编写了一个非常冗长的脚本来创建一个表单。它的主要目的是连接到 vCenter 服务器、汇总不同数据中心内的主机/虚拟机以及识别 ESXi 主机版本。在 ISE 中运行脚本,表单加载正常,当我单击按钮启动许多不同的功能来更新字段时,它会运行。我在整个过程中都有 Foreach() 字段,并在表单底部添加了一个小的 StatusLabel 以显示它当前正在扫描的脚本中的位置。

一切都完成并开始工作后,我保存了 PS1 文件并将其移至共享服务器上运行。当我运行 Powershell 控制台(以管理员身份)并指向文件时,表单加载正常。一旦我单击按钮开始生成信息,它就会变为(未响应)并变灰。我知道它正在工作,如果留在那里足够长的时间,它会返回信息。

为什么控制台窗口的功能不像 ISE?我希望能够在脚本中看到信息和状态标签的更新/更改(就像我在 ISE 中所做的那样)。

感谢您的反馈。该脚本有几千行长,在我上传之前需要清理一下。希望在这样做之前获得一些一般信息。

【问题讨论】:

  • 我的第一个猜测是个人资料问题。确保在服务器上运行它的帐户与您在 ISE 中运行它的帐户具有相同的权限。还要确保为在服务器上运行它的帐户加载任何必需的管理单元或模块。
  • 为了确认您的发现,我还将关闭您在工作环境中打开的所有 ISE 会话,并再次在 ISE 中运行它。可能会有会话信息在您可能不知道的运行之间持续存在,例如变量。
  • @LTrig 某些 Windows.Forms 功能需要 PowerShell 才能在单线程单元 (STA) 中运行。默认情况下 Powershell_ISE 在 STA 中运行,但 PowerShell 命令提示符将在 MTA 中运行。 (我认为这在第 3 版之前是正确的)检查您的公寓状态会话运行[System.Threading.Thread]::CurrentThread.GetApartmentState()
  • @LTrig 好的,以上在 PowerShell v.2 中是正确的,并且在 v.3 中已修复。见Is Powershell -sta (apartment state) preferred?
  • 感谢大家提供的信息。会做一些检查并报告回来。还在我们的一些服务器上从 v2 升级到 v4。

标签: powershell


【解决方案1】:

我更新到 v4 并使用 Jan Chrbolka 的命令验证了我的命令窗口作为 STA 运行。脚本现在可以正常运行了。

【讨论】:

    【解决方案2】:

    我也面临同样的问题。(顺便说一句,我现在无法将 Powershell 升级到 V4,因为它是我公司拥有的。)

    当我从 Powershell 命令行启动它时,我在表单中合并的浏览按钮不起作用。当我点击浏览按钮时,它进入了 Not Responding 状态。

    我听取了 Jan ChrbolkaMay 关于 STA 和 MTA 的建议。

    我检查了与此相关的线程并将脚本执行格式更改为以下解决了我的问题的格式。(添加单词-STA)

    powershell -STA -File D:\PS\GUI.ps1
    

    用于检查当前状态。在 Commandshell 和 ISE 中使用以下查询。

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 2013-02-12
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多