Запускать сценарий powershell в фоновом режиме раз в минуту - PullRequest
26 голосов
/ 15 января 2010

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

Ответы [ 8 ]

23 голосов
/ 15 января 2010

Используйте планировщик задач Windows и запустите ваш скрипт следующим образом:

powershell -File myScript.ps1 -WindowStyle Hidden

Кроме того, создайте сценарий, который он запускает под определенной учетной записью пользователя, и не только когда этот пользователь вошел в систему . В противном случае вы увидите окно консоли.

16 голосов
/ 09 января 2011

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

Создайте начальный Invoke-MyScript.ps1:

for(;;) {
 try {
  # invoke the worker script
  C:\ROM\_110106_022745\MyScript.ps1
 }
 catch {
  # do something with $_, log it, more likely
 }

 # wait for a minute
 Start-Sleep 60
}

Запустите это из Cmd (например, из загрузочного файла .bat):

start /min powershell -WindowStyle Hidden -Command C:\ROM\_110106_022745\Invoke-MyScript.ps1

Окно PowerShell появляется на мгновение, но оно сворачивается из-за start /min, и через мгновение оно скрывается навсегда. Так что на самом деле на мгновение появляется только значок панели задач, а не само окно. Это не так уж плохо.

10 голосов
/ 22 июня 2013

Запланируйте свою задачу как Системную. Команда ниже запланирует выполнение сценария в фоновом режиме без отображения окна консоли powershell:

schtasks /create /tn myTask /tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1" /sc minute /mo 1 /ru System
Переключатель

/ru позволяет изменить пользовательский контекст, в котором будет выполняться запланированное задание.

4 голосов
/ 28 сентября 2018

Чтобы создать фоновую задачу powershell для запуска сценария, который повторяется каждую минуту без видимого окна, запустите powershell от имени администратора, а затем используйте командлет Register-ScheduledJob для запуска сценария. Вот пример того, как это сделать:

Register-ScheduledJob -Name 'SomeJobName' -FilePath 'path\to\your\ps1' -Trigger (New-JobTrigger -Once -At "9/28/2018 0am" -RepetitionInterval (New-TimeSpan -Minutes 1) -RepetitionDuration ([TimeSpan]::MaxValue))

Если вы хотите вручную запустить это задание (возможно, в целях устранения неполадок), вы можете использовать следующий командлет Get-ScheduledJob:

(Get-ScheduledJob -Name 'SomeJobName').StartJob()
2 голосов
/ 06 мая 2014

На вкладке [Общие] в свойствах планировщика заданий для радиокнопки "Запускать независимо от того, вошел пользователь в систему или нет" окно не отображается на моем компьютере с Windows 7.

0 голосов
/ 31 декабря 2015
#   Filecheck.ps1

#   Version 1.0

#   Use this to simply test for the existance of an input file... Servers.txt.

#   I want to then call another script if the input file exists where the

#   servers.txt is neded to the other script.

#


    $workpath=".\Server1\Restart_Test"

#   Created a functon that I could call as part of a loop.


    function Filecheck

    {
    if (test-path $workpath\servers.txt)

        {

        rename-item $workpath\servers.txt servers1.txt

        "Servers.txt exist... invoking an instance of your script agains the list of servers"


        Invoke-Expression .\your_Script.ps1

        }

    Else
        {

            "sleeping"

            Start-Sleep -Seconds 60
        }

     }

    Do
        {
        Filecheck

        $fred=0
        # Needed to set a variabe that I could check in the while loop.

        # Probably a better way but this was my way.

        }

        While( $fred -lt 1 )
0 голосов
/ 09 мая 2014

Если вы хотите запустить скрипт автоматически через промежуток времени. (для Windows OS)

1)  Open Schedule tasks from control panel.
2)  Select Task Scheduler Library from left side window.
3)  select Create Task from right side window.
4)  Enter Name in General tab (any name).
5)  Open Triggers tab -> New
6)  Select interval as needed.Use Advanced settings for repeat task. 
7)  Open Actions tab ->New
8)  Copy/Paste following line in Program/script *

* Here D:\B.ps1 in code is path to my B.ps1 file

C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe D: \ B.ps1

9)  ok and apply changes
10) Done!  
0 голосов
/ 01 марта 2012

Эти ответы являются историческими! Если вы хотите запустить скрипт powershell в качестве фонового задания, попробуйте start-job. \ script из CLI в папке, в которой находятся сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...