Как скрыть консоль, но не графический интерфейс в самоподъемном скрипте Powershell - PullRequest
1 голос
/ 17 мая 2019

Я хочу создать графический интерфейс для моих скриптов 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 }

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

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

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)

Но ваш пост является потенциальной копией этого ..

Открытие скрипта PowerShell и скрытие командной строки, но не GUI

0 голосов
/ 17 мая 2019

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