Как скрыть консоль, но не графический интерфейс в самоподъемном скрипте Powershell

Я хочу создать графический интерфейс для моих скриптов Powershell, чтобы другие тоже могли их легко использовать. У меня есть сценарий главного меню, который вызывает некоторые другие сценарии. Для одного из них мне понадобился повышенный процесс 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, но и пустое окно консоли в фоновом режиме.

Я пытался использовать -WindowStyle Hidden

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 }

Но это привело к тому, что консоль и графический интерфейс были скрыты.

В любом случае, чтобы скрыть это окно консоли, но не графический интерфейс?

Всего 1 ответ


Некоторое время назад я нашел решение, оно где-то здесь, в 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)

Есть идеи?

10000