无法通过批处理文件执行带有Windows消息的PowerShell脚本

时间:2017-06-09 14:37:44

标签: winforms powershell batch-file cmd

我有一个简单的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

错误: enter image description here 有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

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

这是完全未经测试的

答案 1 :(得分:0)

好的我明白了。 问题出在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')

无需更改批处理文件即可运行。

谢谢,

答案 2 :(得分:0)

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

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

我希望这有帮助,如果您有任何其他问题,请在下面发表评论。