SEO программы для веб-мастера > PowerShell для веб-мастеров > Запуск скрипта PoS без окна (в скрытом режиме)

Скрытый запуск PowerShell

В некоторых случаях вам может понадобится запуск сценария PowerShell в скрытом режиме, т.е. без появляющегося окна консоли. Такая необходимость может возникнуть, например, при периодическом запуске скрипта PoS через планировщик заданий, когда мелькающее черное окошко может отвлекать от работы или игры. Кроме того, многие системные администраторы предпочитают запускать сценарии PowerShell в скрытом режиме (без окна), чтобы не смущать неопытных пользователей, которых может напугать неожиданно появившееся черное окно консоли PowerShell.

Существует несколько способов спрятать окно PowerShell, однако все они не гарантируют того, что всплывающее окно консоли не появится хотя бы на доли секунды. Так что, лучше всего попеременно опробовать все три нижеприведенных решения, чтобы определить, какое именно из них является наиболее удобным для вас.

Запуск сценария PowerShell из скрипта .vbs

Создайте vbs-скрипт и добавьте в него следующий код, заменив адрес сценария PowerShell на свой:

command = "powershell.exe -nologo -noninteractive -command С:\Temp\my-script.ps1"
set shell = CreateObject("WScript.Shell")
shell.Run command,0, false

Цифра 0 означает запуск в скрытом виде, false — отсутствие ожидания окончания выполнения команды.

Теперь для запуска сценария PowerShell вы достаточно просто запустить этот vbs-файл, также его можно поместить в Планировщик задач. В любом случае окно консоли мелькать не будет.

PowerShell.exe -nologo -noninteractive -windowStyle hidden

Можно просто добавить в расписание исполнение скрипта следующим образом:

powershell.exe "С:\Temp\my-script.ps1" -NoLogo -NonInteractive -WindowStyle Hidden

Однако чаще всего этот способ не позволяет скрыть скрипт PowerShell от пользователя и окно консоли все равно мелькает.

Функция ShowWindowAsynс Windows API

Убрать окно консоли PowerShell можно, используя Windows API, а именно функцию функцией ShowWindowAsynс. Для этого просто добавьте в начало скрипта следующий код:

$Signature = @"
[DllImport(«user32.dll»)]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$ShowWindowAsync = Add-Type -MemberDefinition $Signature -Name «Win32ShowWindowAsync» -Namespace Win32Functions -PassThru
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 0)


Меню сайта

Скрытый запуск PowerShell
Скрытый запуск PowerShell