Как запустить скрипт PowerShell без отображения окна?

Как можно запустить PowerShell скрипт без отображения окна или любого другого знака пользователю?

другими словами, скрипт должен работать тихо в фоновом режиме без какого-либо знака пользователю.

дополнительный кредит для ответа, который не использует компоненты третьих лиц:)

7 ответов


вы можете либо запустить его так (но это показывает окна на некоторое время):

PowerShell.exe -windowstyle hidden { your script.. }

или вы используете вспомогательный файл, который я создал, чтобы избежать окна под названием PsRun.exe, который делает именно это. Вы можете скачать исходный и exe файл запуск запланированных задач с помощью WinForm GUI в PowerShell. Я использую его для запланированных задач.

Edited: как отметил Марко, этот параметр-windowstyle доступен только для V2.


можно использовать Расширения Сообщества PowerShell и этого:

start-process PowerShell.exe -arg $pwd\foo.ps1 -WindowStyle Hidden

вы также можете сделать это с помощью VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/

(Via эта ветка форума.)


вот подход, который не требует args командной строки или отдельной пусковой установки. Это не совсем невидимо, потому что окно отображается мгновенно при запуске. Но потом она быстро исчезает. Где это нормально, это, я думаю, самый простой подход, если вы хотите запустить свой скрипт, дважды щелкнув в проводнике или с помощью ярлыка меню "Пуск" (включая, конечно, подменю "запуск"). И мне нравится, что это часть кода самого скрипта, а не что-то внешний.

поместите это перед вашим скриптом:

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

У меня была эта проблема при запуске с C#, в Windows 7, служба "обнаружение интерактивных служб" появлялась при запуске скрытого окна powershell в качестве учетной записи системы.

использование параметра "CreateNoWindow" предотвратило появление службы ISD, это предупреждение.

process.StartInfo = new ProcessStartInfo("powershell.exe",
    String.Format(@" -NoProfile -ExecutionPolicy unrestricted -encodedCommand ""{0}""",encodedCommand))
{
   WorkingDirectory = executablePath,
   UseShellExecute = false,
   CreateNoWindow = true
};

вот однострочный:

mshta vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'C:\Example Path That Has Spaces\My Script.ps1'"""""", 0 : window.close")

хотя это возможно, чтобы мигать окно очень кратко, это должно быть редким явлением.


Я думаю, что лучший способ скрыть экран консоли PowerShell при запуске фоновых скриптов -код ("Bluecakes" ответа).

Я добавляю этот код в начале всех моих сценариев PowerShell, которые мне нужно запустить в фоновом режиме.

# .Net methods for hiding/showing the console in the background
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);
'
function Hide-Console
{
    $consolePtr = [Console.Window]::GetConsoleWindow()
    #0 hide
    [Console.Window]::ShowWindow($consolePtr, 0)
}
Hide-Console

если этот ответ поможет вам, пожалуйста, проголосуйте за "Bluecakes" в своем ответе на этот пост.


У меня была такая же проблема. Я узнал, если вы идете в задание на Планировщик Задач под управлением powershell.exe скрипт, вы можете нажать "выполнить независимо от того, вошел ли use в систему или нет " и это никогда не покажет окно powershell при выполнении задачи.