我想为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?
答案 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)
# 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