我有一个简单的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
答案 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')
我希望这有帮助,如果您有任何其他问题,请在下面发表评论。