打开PowerShell脚本并隐藏命令提示符,但不是GUI
我目前通过.bat文件打开PowerShell脚本。该脚本有一个GUI。我试图把这个在我的剧本,但它躲到了GUI以及还不停地循环,因为我想我的GUI,不断循环:打开PowerShell脚本并隐藏命令提示符,但不是GUI
powershell.exe -WindowStyle Hidden -file c:\script.ps1
我们如何运行没有命令Promp一个剧本,但也不能掩盖GUI?如果我们使用.bat文件运行脚本,情况是否如此?谢谢!
如果你想隐藏的GUI我已经与下面的本地函数成功背后的控制台:一旦上述功能已经被添加到您的表格
# .Net methods for hiding/showing the console in the background
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'
function Show-Console
{
$consolePtr = [Console.Window]::GetConsoleWindow()
# Hide = 0,
# ShowNormal = 1,
# ShowMinimized = 2,
# ShowMaximized = 3,
# Maximize = 3,
# ShowNormalNoActivate = 4,
# Show = 5,
# Minimize = 6,
# ShowMinNoActivate = 7,
# ShowNoActivate = 8,
# Restore = 9,
# ShowDefault = 10,
# ForceMinimized = 11
[Console.Window]::ShowWindow($consolePtr, 4)
}
function Hide-Console
{
$consolePtr = [Console.Window]::GetConsoleWindow()
#0 hide
[Console.Window]::ShowWindow($consolePtr, 0)
}
,只需调用Hide-Console
功能在你的事件:
$OnFormLoad =
{
Hide-Console
}
如果你需要显示控制台,也许调试,您可以轻松地再次通过调用函数Show-Console
显示控制台:
$OnButtonClick =
{
Show-Console
}
有关编号的详细信息可以传递给ShowWindow
您可以根据评论检查出ShowWindow documentation on MSDN here
更新
感谢这个代码。我试图在我的脚本中使用它,但我想在哪里放置Hide-Console?我的窗体加载看起来像这样$ objForm.Add_Shown({$ objForm.Activate()})[空] $ objForm.ShowDialog()
要隐藏与此代码的控制台,所有你需要做的就是调用Hide-Console
。既然你已经在Shown
事件($objForm.Add_Shown
)的代码,我们可以简单地添加另一行调用命令:
更改此:
$objForm.Add_Shown({$objForm.Activate()})
要这样:
$objForm.Add_Shown({
$objForm.Activate()
Hide-Console
})
当你的表格是Shown
控制台将被隐藏(如果您想稍后再看,您仍然可以拨打Show-Console
)。
如果您从窗口设置为最小化的快捷方式运行PowerShell,它会短暂闪烁任务栏中的cmd图标,但您几乎不会注意到它。但是,它将在没有控制台窗口的情况下启动PowerShell GUI。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle Hidden -file "C:\path\whatever.ps1"
如果你要开始whatever.ps1第二GUI控制台窗口没有它停止在whatever.ps1你需要使用的启动过程的处理。但是,隐藏-WindowStyle的启动过程会阻止GUI显示。删除-WindowStyle在GUI后面显示一个命令窗口。但是,如果您使用cmd.exe/k开始处理,它确实可行。
$argumentlist = "/c powershell.exe -file `"c:\path\whatever2.ps1`" -param1 `"paramstring`""
Start-Process cmd.exe -WindowStyle Hidden -ArgumentList $argumentlist
作为奖励,如果你开始whatever2。ps1和param()语句,您可以传递命名的必需参数。确保它是ps1文件中的第一件事,甚至在组件之前。
param (
[Parameter(Mandatory=$true)]
[string]$var1
)
$argumentlist = "/c powershell.exe -file `"C:\path\whatever2.ps1`" -param1 `"param1string`""
将其放入快捷方式而不是批处理文件中。右键单击桌面上或文件夹窗口中的空白处,单击新建,快捷方式,粘贴您的行,然后命名它,完成。 – 2016-11-15 19:47:33
谢谢面条,这工作!我做了这个'%SystemRoot%\ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoProfile -file“\\ location \ folder1 \ script.ps1”' – DrixlRey