【问题标题】:unable to execute PowerShell script with windows message via batch file无法通过批处理文件执行带有 Windows 消息的 PowerShell 脚本
【发布时间】:2017-11-11 15:13:12
【问题描述】:

我有一个简单的 PowerShell 脚本,它使用 windows.forms 来使用 GUI 呈现和获取数据。 当我使用 PowerShell 运行它时它可以工作,但不能通过 CMD 工作。 这是 .ps1 示例:

[System.Windows.MessageBox]::Show('message','Step 1','YesNoCancel','Question')

执行批处理文件:

powershell "&{start-process powershell -ArgumentList ' -noprofile -file c:\temp\gui.ps1' -verb RunAs} exit $LASTEXITCODE" < NUL

我得到的错误是:找不到类型 [System.Windows.MessageBox]。 我知道 CMD 运行在不同的上下文和程序集需要加载,所以我尝试从 CMD 命令加载它,但仍然是同样的错误。

powershell "&{[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); start-process powershell -ArgumentList ' -noprofile -file c:\temp\gui.ps1' -verb RunAs} exit $LASTEXITCODE" < NUL

错误: 有什么想法吗?

【问题讨论】:

    标签: winforms powershell batch-file cmd


    【解决方案1】:

    你可以试试这样的:

    PowerShell -NoProfile -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\temp\gui.ps1""' -Verb RunAs}"; Exit $LastExitCode
    

    这是完全未经测试的

    【讨论】:

    • 我已经用更完整的命令更新了我的答案,请随时尝试一下。
    【解决方案2】:

    好的,我想通了。 问题出在 PowerShell 脚本上, 我使用了 [System.Windows.MessageBox] 而不是 [System.Windows.Forms.MessageBox] 之前:

    [System.Windows.MessageBox]::Show('message','Step 1','YesNoCancel','Question')
    

    之后:

    [System.Windows.Forms.MessageBox]::Show('message','Step 1','YesNoCancel','Question')
    

    无需更改批处理文件即可工作。

    谢谢,

    【讨论】:

      【解决方案3】:

      尝试在批处理文件中运行以下命令:

      powershell -command [System.Windows.Forms.MessageBox]::Show('message','Step 1','YesNoCancel','Question')
      

      希望对你有帮助,如果有其他问题,请在下方评论。

      【讨论】:

      • 没有解释为什么原始命令在 powershell 控制台中有效,而不是在批处理执行的 powershell 解释中。
      猜你喜欢
      • 2023-03-30
      • 2018-04-12
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多