我目前通过一个打开我的PowerShell脚本。bat文件。该脚本具有GUI。我试着把它放在我的脚本中,但它也隐藏了GUI,并且还一直循环,因为我希望我的GUI不断循环:
powershell.exe -WindowStyle Hidden -file c:\script.ps1
我们如何在不使用Command Promp的情况下运行脚本,同时又不隐藏GUI?如果我们使用。 bat 档案?谢谢!
我目前通过一个打开我的PowerShell脚本。bat文件。该脚本具有GUI。我试着把它放在我的脚本中,但它也隐藏了GUI,并且还一直循环,因为我希望我的GUI不断循环:
powershell.exe -WindowStyle Hidden -file c:\script.ps1
我们如何在不使用Command Promp的情况下运行脚本,同时又不隐藏GUI?如果我们使用。 bat 档案?谢谢!
6条答案
按热度按时间nr9pn0ug1#
如果你想隐藏GUI后面的控制台,我已经成功地使用了以下本机函数:
将上述函数添加到Form后,只需在
Form_Load
事件中调用Hide-Console
函数:如果您需要显示控制台,也许是为了调试,您可以通过调用
Show-Console
函数轻松地再次显示控制台:有关可以传递给
ShowWindow
的数字的更多信息,请查看ShowWindow documentation on MSDN here根据评论更新
谢谢这个代码。我试着在我的脚本中使用它,但是我应该把Hide-Console放在哪里呢?我的表单加载看起来像这个$objForm。Add_Showed({$objForm.Activate()})[void] $objForm。ShowDialog()
要使用此代码隐藏控制台,您需要做的就是调用
Hide-Console
。因为你已经有了Shown
事件($objForm.Add_Shown
)中的代码,我们可以简单地添加另一行来调用命令:更改此:
对此:
当你的表单是
Shown
时,控制台将被隐藏(如果你以后想看到它,你仍然可以调用Show-Console
)。ncgqoxb02#
如果您从窗口设置为最小化的快捷方式运行PowerShell,它会在任务栏中短暂 Flink 一个cmd图标,但您几乎不会注意到它。然而,它将启动您的PowerShell GUI,而无需在其后面使用控制台窗口。
如果你想启动第二个GUI控制台窗口。ps1没有它停止处理任何东西。ps1你需要使用start-process.但是,隐藏了-WindowStyle的start-process会阻止GUI显示。移除-WindowStyle在GUI后面显示命令窗口。但是,如果您使用cmd启动进程。exe /k,它可以工作。
作为奖励,如果你开始什么2。使用param()语句的ps1,可以传递指定的必需参数。只要确保它是ps1文件中的第一件事,甚至在汇编之前。
0tdrvxhp3#
在建议的解决方案中发表评论(*
把它放在一个快捷方式中,而不是放在批处理文件中。右键单击桌面或文件夹窗口中的空白点,新建,快捷方式,粘贴行,下一步,命名,完成
soat7uwm4#
简化了显示隐藏的功能
show-console -show
show-console -hide
liwlm1x95#
我也有同样的问题。我需要一个Winform显示没有控制台窗口显示。到目前为止,最简单的方法是打开另一个运行Winform的非隐藏窗口,然后隐藏自己。例如:
启动进程powershell。exe -windowstyle normal C:\SomePathToScript。ps1
上面的脚本。ps1文件将作为一种“启动器”为您的实际Winform脚本。
在这个“启动”脚本中:
powershell.exe -windowstyle hidden C:\Path\To\Winform\Script.ps1
在启动脚本中,一定要省略powershell前面的“start-process”。这就像是一种内置的隐藏效果。你会看到一个短暂的PowerShell窗口出现,然后它立即消失。
6rvt4ljy6#
虽然the answer by Bluecakes很棒,但它可以简化一点。不需要使用
kernel32.dll
中的GetConsoleWindow()
函数来获取控制台窗口处理程序。它可以通过MainWindowHandle
property of theProcess
class获得,而进程本身由Get-Process
cmdlet返回,the automatic$pid
variable作为参数传递。下面是一个只隐藏当前控制台窗口的示例:请注意,上面的操作仅用于在加载GUI表单之前隐藏控制台。否则,表单将成为进程的主窗口,表单的句柄将由
MainWindowHandle
返回。如果你需要在窗体加载后操作控制台窗口,并且仍然避免使用kernel32.dll
,你可以在一开始就将其句柄保存在一个变量中: