web-dev-qa-db-fra.com

Exécutez un script PowerShell en arrière-plan une fois par minute

Je veux qu'un script PowerShell soit exécuté une fois par minute en arrière-plan. Aucune fenêtre ne peut apparaître. Comment fait-on ça?

26
magol

Utilisez le Planificateur de tâches Windows et exécutez votre script comme ceci:

powershell -File myScript.ps1 -WindowStyle Hidden

De plus, créez le script qu'il exécute sous un compte d'utilisateur spécifique et pas seulement lorsque cet utilisateur est connecté. Sinon, vous verrez une fenêtre de console.

23
Joey

Peut-être que ce scénario fera l'affaire. Nous ne démarrons pas l'exécutable PowerShell toutes les minutes (cela coûte cher, BTW). Au lieu de cela, nous le démarrons une fois en appelant un script supplémentaire qui appelle le script de travail une fois par minute (ou attend réellement une minute après la fin ou l'échec du script de travail).

Créez le premier 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
}

Exécutez ceci à partir de Cmd (par exemple à partir d'un fichier de démarrage .bat):

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

La fenêtre PowerShell apparaît pendant un moment mais elle est réduite en raison de start /min et juste en un instant, il se cache pour toujours. Donc, en fait, seule l'icône de la barre des tâches apparaît pendant un moment, pas la fenêtre elle-même. Ce n'est pas si mal.

16
Roman Kuzmin

Planifiez l'exécution de votre tâche en tant que système. La commande ci-dessous planifiera l'exécution d'un script en arrière-plan sans afficher la fenêtre de la console PowerShell:

schtasks/create/tn myTask/tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1"/sc minute/mo 1/ru System

/ru switch vous permet de modifier le contexte utilisateur dans lequel la tâche planifiée sera exécutée.

10
xemlock

Pour créer une tâche PowerShell en arrière-plan pour exécuter un script qui se répète toutes les minutes sans aucune fenêtre visible, exécutez PowerShell en tant qu'administrateur, puis utilisez le Register-ScheduledJob applet de commande pour exécuter votre script. Voici un exemple de comment y parvenir:

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))

Si vous souhaitez forcer manuellement l'exécution de ce travail (peut-être à des fins de dépannage), vous pouvez utiliser le Get-ScheduledJob applet de commande comme ceci:

(Get-ScheduledJob -Name 'SomeJobName').StartJob()
4
sippybear

Dans l'onglet [Général] des propriétés du Planificateur de tâches pour la tâche, la sélection de la case d'option "Exécuter si l'utilisateur est connecté ou non" empêche la fenêtre d'apparaître sur mon ordinateur Windows 7.

2
Mike Brady

Si vous souhaitez exécuter le script automatiquement dans l'intervalle de temps. (pour 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
Ravi Prajapati

Ces réponses sont historiques! Si vous souhaitez exécuter un script PowerShell en tant que tâche d'arrière-plan, essayez start-job.\Script à partir de la CLI dans le dossier dans lequel vous hébergez les scripts.

0
Chris