使用PowerGUI将ps1转换为exe时出现问题

时间:2015-11-16 13:15:49

标签: powershell powergui

我尝试将PowerShell项目转换为可执行程序(.exe)。经过一些研究,我找到了PowerGUI。将我的.ps1文件转换为exe后,我遇到了一些问题:

首先启动程序需要很长时间(大约15秒),这是正常的还是我可以做些什么来改善这个?

其次,如果我退出程序,我会收到一条Windows错误消息,说该程序意外停止工作。有没有办法隐藏这条消息?

这是我的ps1代码,我从博客中得到了它的一部分,这是我的第一个PowerShell代码,所以不要对我苛刻;)

explicit

2 个答案:

答案 0 :(得分:1)

关于 15秒我不知道为什么。你能提供更多细节吗?您应该在每条消息中添加日志记录并设置时间戳...这样您就可以找到慢速部分。

关于避免错误消息,您应该使用try/catch包围代码。例如:

    [...]

    write-host "To show the form, run the following" -ForegroundColor Cyan

    function Show-Form
    {
     $Form.ShowDialog() | out-null
    }

    try
    {
     Show-Form
    }
    catch
    {
     $ErrorMessage = $_.Exception.Message
     # Show friendly message with error and/or log the error)
    }

在阅读完代码后,这里有一些额外的建议可能会有用:

  • 不要对路径进行硬编码。 (例如“C:\ Users \ Bjorn \ Documents \ Powershell \”)
  • 你真的需要PowerShell吗?听起来像C#WinForms会更好地完成这项任务。
  • 将XML存储在一个文件中并将其读取,而不是将其放在$ inputXML变量的代码中。

答案 1 :(得分:1)

暂停15秒是PowerShell在后台初始化。这在Windows 7上尤为明显

CAVEAT:在大多数情况下(包括PowerGUI)“编译”PowerShell到EXE会将原始PS1文件填充到自解压EXE中。您可以使用7-Zip或WinZip执行相同的操作。

PowerGUI“已编译”EXE将您的脚本执行锁定到DEV盒上的任何版本或PowerShell + .Net。 IOW:如果您在使用PowerShell v4的PC上编译但仅在脚本中使用Write-host(例如),目标PC将需要PowerShell v4 +才能运行!