如何在自提升的Powershell脚本中隐藏控制台而不隐藏GUI

时间:2019-05-17 13:01:46

标签: winforms powershell

我想为Powershell脚本制作一个GUI,以便其他人也可以轻松使用它们。 我有一个主菜单脚本,女巫调用了其他一些脚本。 对于其中之一,我需要提升的Powershell流程。

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSFilePath`"" -Verb RunAs; exit }

现在我的问题是,不仅显示了$ PSFilePath中的GUI,而且在后台显示了一个空的控制台窗口

我尝试使用-WindowStyle隐藏

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSFilePath`"" -WindowStyle Hidden -Verb RunAs; exit }

但这导致控制台和GUI都被隐藏。

是否要隐藏该控制台窗口而不是GUI?

2 个答案:

答案 0 :(得分:0)

我前段时间找到了一个解决方案,该解决方案埋在StackOverflow的此处某个位置,但现在找不到指向它的链接。它将打开并立即关闭空的控制台窗口。

只需将其粘贴到脚本的开头:

$dllvar = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
add-type -name win -member $dllvar -namespace native
[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)

答案 1 :(得分:0)

Try...

# Hide PowerShell Console
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);
'
$consolePtr = [Console.Window]::GetConsoleWindow()
[Console.Window]::ShowWindow($consolePtr, 0)

但是您的帖子可能与此重复。

Opening PowerShell Script and hide Command Prompt, but not the GUI