запуск скрипта powershell без окна
Как запустить скрипт PowerShell без отображения окна?
Как можно запустить PowerShell скрипт без отображения окна или любого другого знака пользователю?
другими словами, скрипт должен работать тихо в фоновом режиме без какого-либо знака пользователю.
дополнительный кредит для ответа, который не использует компоненты третьих лиц:)
7 ответов
вы можете либо запустить его так (но это показывает окна на некоторое время):
или вы используете вспомогательный файл, который я создал, чтобы избежать окна под названием PsRun.exe, который делает именно это. Вы можете скачать исходный и exe файл запуск запланированных задач с помощью WinForm GUI в PowerShell. Я использую его для запланированных задач.
Edited: как отметил Марко, этот параметр-windowstyle доступен только для V2.
вот подход, который не требует args командной строки или отдельной пусковой установки. Это не совсем невидимо, потому что окно отображается мгновенно при запуске. Но потом она быстро исчезает. Где это нормально, это, я думаю, самый простой подход, если вы хотите запустить свой скрипт, дважды щелкнув в проводнике или с помощью ярлыка меню «Пуск» (включая, конечно, подменю «запуск»). И мне нравится, что это часть кода самого скрипта, а не что-то внешний.
поместите это перед вашим скриптом:
У меня была эта проблема при запуске с C#, в Windows 7, служба «обнаружение интерактивных служб» появлялась при запуске скрытого окна powershell в качестве учетной записи системы.
использование параметра «CreateNoWindow» предотвратило появление службы ISD, это предупреждение.
хотя это возможно, чтобы мигать окно очень кратко, это должно быть редким явлением.
Я добавляю этот код в начале всех моих сценариев PowerShell, которые мне нужно запустить в фоновом режиме.
Как запустить PowerShell в скрытом режиме
Иногда может потребоваться запустить скрипт PowerShell в скрытом режиме, незаметно для пользователя. Достичь этого можно различными способами, о некоторых я сегодня расскажу.
Способ первый
Начиная со второй версии PowerShell при запуске можно использовать параметр -WindowStyle со значением Hidden. Это позволяет осуществить запуск в скрытом режиме, без открытия консоли. Предположим, что у меня в папке C:\Temp лежит скрипт hello.ps1, который надо ″по тихому″ выполнить при входе пользователя. Для этого используем следующую команду:
Теоретически скрипт должен выполниться в фоне, незаметно для пользователя. Но на практике этот способ работает не всегда, в некоторых случаях во время выполнения скрипта окно PowerShell остается открытым. Поэтому, на всякий случай, рассмотрим еще пару способов запустить PowerShell в скрытом режиме.
Способ второй
Полученный код добавляем в начало скрипта.
Способ третий
Скрыть запуск PowerShell можно, как ни странно, с помощью VBScript. Для этого создаем vbs-файл следующего содержания:
Цифра 0 в скрипте означает запуск в скрытом виде, false — не ждать окончания выполнения команды.
Теперь для запуска PowerShell скрипта надо запустить этот vbs-файл и он тихо выполнится.
В заключение уточню, что все три способа не могут полностью скрыть запуск скрипта. При запуске все равно видно всплывающее окно. Заметить этот момент сложно, поскольку окно всплывает на доли секунды, но все же можно.
How to run a PowerShell script without displaying a window?
How is it possible to run a PowerShell script without displaying a window or any other sign to the user?
In other words, the script should run quietly in the background without any sign to the user.
Extra credit for an answer that does not use third party components 🙂
19 Answers 19
You can either run it like this (but this shows a windows for a while):
Or you use a helper file I created to avoid the window called PsRun.exe that does exactly that. You can download source and exe file Run scheduled tasks with WinForm GUI in PowerShell. I use it for scheduled tasks.
I was having this same issue. I found out if you go to the Task in Task Scheduler that is running the powershell.exe script, you can click «Run whether user is logged on or not» and that will never show the powershell window when the task runs.
Here’s an approach that that doesn’t require command line args or a separate launcher. It’s not completely invisible because a window does show momentarily at startup. But it then quickly vanishes. Where that’s OK, this is, I think, the easiest approach if you want to launch your script by double-clicking in explorer, or via a Start menu shortcut (including, of course the Startup submenu). And I like that it’s part of the code of the script itself, not something external.
Put this at the front of your script:
Although it’s possible for this to flash a window very briefly, that should be a rare occurrence.
ps1 hidden from the Task Scheduler and shortcut too
Your machine or setup may differ but it works well for me.
1. Call a file
2. Call a file with arguments
3. Call a file with a function and arguments
Powershell content for 3. Call a file with a function and arguments is:
In case you need to run this in Task Scheduler then call %comspec% as the Program/Script and then code for calling the file above as the argument.
I think that the best way to hide the console screen of the PowerShell when your are running a background scripts is this code («Bluecakes» answer).
I add this code in the beginning of all my PowerShell scripts that I need to run in background.
I was having this problem when running from c#, on Windows 7, the «Interactive Services Detection» service was popping up when running a hidden powershell window as the SYSTEM account.
Using the «CreateNoWindow» parameter prevented the ISD service popping up it’s warning.
Here’s a fun demo of controlling the various states of the console, including minimize and hidden.
I got really tired of going through answers only to find it did not work as expected.
Solution
Make a vbs script to run a hidden batch file which launches the powershell script. Seems silly to make 3 files for this task but atleast the total size is less than 2KB and it runs perfect from tasker or manually (you dont see anything).
scriptName.vbs
scriptName.bat
scriptName.ps1
Create a shortcut that calls the PowerShell script and set the Run option to Minimized. This will prevent a window from flashing although you will still get a momentary blip of the script running on the Task Bar.
For easy command line usage, there is a simple wrapper app:
Example command line:
I have created a small tool passing the call to any console tool you want to start windowless through to the original file:
After compiling just rename the executable to » w.exe» (append a «w»), and put it next to the original executable. You can then call e.G. powershellw.exe with the usual parameters and it wont pop up a window.
If someone has an idea how to check whether the created process is waiting for input, ill be happy to include your solution 🙂
Here is a working solution in windows 10 that does not include any third-party components. It works by wrapping the PowerShell script into VBScript.
-go to run and type «regedit». Click on ok and then allow it to run.
-paste this path «HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell» and press enter.
-now open the entry on the right and change the value to 0.
Step 2: Now we can start wrapping our script.
-create a new text document and paste this script.
make sure to upvote if this worked for you!
Как запустить скрипт PowerShell без отображения окна?
Как можно запустить сценарий PowerShell без отображения окна или любого другого знака для пользователя?
Другими словами, сценарий должен работать в фоновом режиме без каких-либо сигналов для пользователя.
Дополнительный балл за ответ, в котором не используются сторонние компоненты 🙂
17 ответов
Вы можете запустить его так (но на какое-то время отображаются окна):
Или вы используете вспомогательный файл, который я создал, чтобы избежать окна PsRun.exe, которое делает именно это. Вы можете скачать исходный и исполняемый файл Запускайте запланированные задачи с помощью графического интерфейса WinForm в PowerShell. Использую для плановых задач.
Вот подход, который не требует аргументов командной строки или отдельной программы запуска. Это не совсем невидимо, потому что окно на мгновение отображается при запуске. Но затем он быстро исчезает. Если все в порядке, это, на мой взгляд, самый простой подход, если вы хотите запустить свой скрипт двойным щелчком в проводнике или с помощью ярлыка меню «Пуск» (включая, конечно, подменю «Запуск»). И мне нравится, что это часть кода самого скрипта, а не что-то внешнее.
Поместите это в начало вашего скрипта:
Хотя при этом возможно очень короткое мигание окна, это должно быть редкостью.
Ps1 скрыт от планировщика заданий и ярлыка тоже
Я добавляю этот код в начало всех моих сценариев PowerShell, которые мне нужно запускать в фоновом режиме.
У меня возникла эта проблема при запуске из C #, в Windows 7 служба «Обнаружение интерактивных служб» выскакивала при запуске скрытого окна PowerShell в качестве учетной записи SYSTEM.
Использование параметра CreateNoWindow предотвратило появление предупреждения службы ISD.
Вот забавная демонстрация управления различными состояниями консоли, включая свертывание и скрытие.
Я создал небольшой инструмент, передающий вызов любому консольному инструменту, который вы хотите запустить без окон, через исходный файл:
После компиляции просто переименуйте исполняемый файл в « w.exe» (добавьте «w») и поместите его рядом с исходным исполняемым файлом. Затем вы можете позвонить в e.G. powershellw.exe с обычными параметрами, и он не выскакивает окно.
Если у кого-то есть идея, как проверить, ожидает ли созданный процесс ввода, я буду рад включить ваше решение 🙂
Вот рабочее решение в Windows 10, которое не включает сторонних компонентов. Он работает путем обертывания сценария PowerShell в VBScript.
-перейдите к запуску и введите «regedit». Нажмите ОК, а затем дайте ему поработать.
-вставьте этот путь «HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell» и нажмите ввод.
-Теперь откройте запись справа и измените значение на 0.
Шаг 2. Теперь мы можем начать упаковывать наш скрипт.
-создайте новый текстовый документ и вставьте этот скрипт.
Не забудьте проголосовать, если это сработало для вас!
Я действительно устал отвечать на вопросы и обнаружил, что это не сработало так, как ожидалось.
Решение
Создайте сценарий vbs для запуска скрытого командного файла, который запускает сценарий PowerShell. Кажется глупым делать 3 файла для этой задачи, но, по крайней мере, общий размер меньше 2 КБ, и он отлично работает из Tasker или вручную (вы ничего не видите).
scriptName.vbs
scriptName.bat
scriptName.ps1
Ваша машина или настройки могут отличаться, но мне они подходят.
1. Вызов файла
2. Вызов файла с аргументами
3. Вызов файла с функцией и аргументами.
Содержимое Powershell для 3. Вызов файла с функцией и аргументами :
Создайте ярлык, который вызывает сценарий PowerShell, и установите для параметра «Выполнить» значение «Свернуто». Это предотвратит мигание окна, хотя вы все равно получите кратковременное сообщение о скрипте, запущенном на панели задач.
При планировании задачи просто выберите «Запускать независимо от того, вошел ли пользователь в систему» на вкладке « Общие ».
Дождитесь выполнения Powershell и получите результат в vbs
Разделяет запутанные ответы от cmd.exe на массив вместо того, чтобы помещать все в сложную для синтаксического анализа строку.
Кроме того, если во время выполнения cmd.exe возникнет ошибка, сообщение о ее возникновении станет известно в vbs.
Затем установите run: Minimized
Должен работать, как ожидалось, без добавления кода для скрытого окна flash, только немного больше отложенного выполнения.
Как запустить сценарий PowerShell без отображения окна?
Как можно запустить сценарий PowerShell, не отображая окно или какой-либо другой знак для пользователя?
Другими словами, сценарий должен работать в фоновом режиме без каких-либо сигналов для пользователя.
Дополнительный балл за ответ, который не использует сторонние компоненты 🙂
Вы можете запустить его так (но на какое-то время отображаются окна):
Вы можете использовать расширения сообщества PowerShell и сделать следующее:
Вот подход, который не требует аргументов командной строки или отдельной программы запуска. Это не совсем невидимо, потому что окно на мгновение отображается при запуске. Но затем он быстро исчезает. Если все в порядке, это, я думаю, самый простой подход, если вы хотите запустить свой скрипт двойным щелчком в проводнике или с помощью ярлыка меню «Пуск» (включая, конечно, подменю «Запуск»). И мне нравится, что это часть кода самого скрипта, а не что-то внешнее.
Поместите это в начало вашего скрипта:
Хотя при этом возможно очень короткое мигание окна, это должно быть редкостью.
У меня возникла эта проблема при запуске из C #, в Windows 7 служба «Обнаружение интерактивных служб» выскакивала при запуске скрытого окна PowerShell в качестве учетной записи SYSTEM.
Использование параметра CreateNoWindow предотвратило появление предупреждения службы ISD.
Я добавляю этот код в начало всех моих сценариев PowerShell, которые мне нужно запускать в фоновом режиме.
ps1 скрыт от планировщика заданий и ярлыка тоже
Я создал небольшой инструмент, передающий вызов любому консольному инструменту, который вы хотите запустить без окон, через исходный файл:
После компиляции просто переименуйте исполняемый файл в « w.exe» (добавьте «w») и поместите его рядом с исходным исполняемым файлом. Затем вы можете вызвать eG powershellw.exe с обычными параметрами, и окно не появится.
Если у кого-то есть идея, как проверить, ожидает ли созданный процесс ввода, я буду рад включить ваше решение 🙂
Вот рабочее решение в Windows 10, которое не включает сторонних компонентов. Он работает, заключая сценарий PowerShell в VBScript.
-перейдите к запуску и введите «regedit». Нажмите ОК, а затем дайте ему поработать.
-вставьте этот путь «HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell» и нажмите ввод.
-Теперь откройте запись справа и измените значение на 0.
Шаг 2: Теперь мы можем начать упаковывать наш скрипт.
-создайте новый текстовый документ и вставьте этот скрипт.
не забудьте проголосовать, если это сработало для вас!