3

我用 WinForms GUI 制作了一个非常简单的 Powershell 脚本。一切都按预期工作,但是当我使用 PowerShell 运行 .ps1 脚本时,首先会出现一个黑色的空控制台窗口,然后显示 GUI。

无论如何让控制台窗口消失?

此致

4

5 回答 5

2

一年前我写了一篇关于这个主题的小文章(抱歉是法语)。

这是使用小型 VBS 脚本启动 PowerShell 隐藏他的窗口的常见解决方案(诀窍在最后一个,0)。

Set Args = Wscript.Arguments
'MsgBox  "Chemin LDAP: " & Args(0)
'MsgBox  "Classe: " & Args(1)

Set objShell = CreateObject("Wscript.Shell")
objShell.Run "c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -Noninteractive -file c:\SlxRH\RhModif.ps1 " & chr(34) & Args(0) & chr(34) , 0

我还将 PowerShell 嵌入到一个名为slxPShell2.EXE的没有控制台的可执行文件中。

于 2012-05-19T19:47:17.410 回答
1

我发现上面的方法对我不起作用。我用这个:

Set objShell = CreateObject("WScript.Shell")

objShell.Run "CMD /C START /B " & objShell.ExpandEnvironmentStrings("%SystemRoot%") & "\System32\WindowsPowerShell\v1.0\powershell.exe -file " & "YourScript.ps1", 0, False

Set objShell = Nothing

希望有帮助。

于 2013-05-17T10:38:13.747 回答
1

此解决方案在启动后最小化 Powershell 窗口。Powershell 窗口打开,然后消失,无需使用任何外部代码。放在脚本的开头。

$t = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
add-type -name win -member $t -namespace native
[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)
于 2020-06-08T21:54:25.017 回答
0

这就是我得到这个工作的方式:

  1. 将 Winforms GUI 脚本放在一个 ScriptOne.ps1 文件中
  2. 使用以下内容创建另一个 LaunchScriptOne.ps1 文件:

powershell.exe -WindowStyle Hidden -File "C:\path\to\ScriptOne.ps1".

该解决方案在同一主题的另一个线程中提供:在 Winform Launch 后隐藏或最小化 powershell 提示

我希望有人也能找到一种方法将其放入一个脚本中。这个帖子上面的答案对我没有帮助,但也许我做错了什么,idk。

于 2019-04-17T14:25:32.487 回答
0

我是 nube,所以没有代表,所以不能内联评论......虽然我很喜欢 @Ipse 的解决方案,但我也确保在脚本完成后关闭隐藏窗口......不确定是否 PS解决这种自动垃圾收集,但怀疑这是一个很好的最佳实践。

例如。在您的脚本结束时,我建议您这样做:

停止进程 -Id $PID

(这应该终止那个隐藏的窗口v。只是让它潜伏并占用这些资源)。

于 2020-11-07T04:51:19.027 回答