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 dois-je faire?
8 réponses
Utilisez le planificateur de tâches Windows et exécutez votre script comme ceci:
powershell -File myScript.ps1 -WindowStyle Hidden
en outre créer le script qu'il exécute sous un compte d'utilisateur spécifique et pas uniquement lorsque l'utilisateur est connecté. Sinon, vous verrez une fenêtre de console.
peut-être que ce scénario fera l'affaire. Nous ne démarrons pas l'exécutable PowerShell à chaque minute (c'est cher, BTW). Au lieu de cela, nous le démarrons une fois en appelant un script supplémentaire qui appelle le script worker une fois par minute (ou en fait attend une minute après que le script worker quitte ou échoue).
créer L'Invoke-MyScript de départ.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'une start-up .fichier bat):
start /min powershell -WindowStyle Hidden -Command C:\ROM\_110106_022745\Invoke-MyScript.ps1
la fenêtre PowerShell apparaît un instant mais elle est réduit en raison de start /min
et juste dans un moment ça devient cachées à jamais. Donc en fait que la barre des tâches icône apparaît pour l'instant, pas de la fenêtre elle-même. Il n'est pas trop mauvais.
Programmez votre tâche pour qu'elle soit exécutée en tant que système. La commande ci-dessous programmera un script à exécuter 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
commutateur permet de changer le contexte de l'utilisateur dans lequel la tâche sera exécutée.
sur l'onglet [General] dans les propriétés du Planificateur de tâches pour la tâche, en sélectionnant le bouton radio "exécuter si l'utilisateur est connecté ou non" empêche la fenêtre d'apparaître sur ma machine Windows 7.
ces réponses sont histériques! Si vous voulez lancer un script powershell comme travail de fond essayez début d'emploi .\script depuis le CLI dans le dossier dans lequel vous hébergez les scripts.
si vous voulez lancer script automatiquement dans l'intervalle de temps. (pour windows)
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
9) ok and apply changes
10) Done!
pour créer une tâche powershell d'arrière-plan pour exécuter un script qui se répète chaque minute sans fenêtre visible du tout, exécutez powershell comme administrateur et puis utilisez le Register-ScheduledJob
cmdlet pour exécuter votre script. Voici un exemple de la façon d'y arriver:
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 voulez forcer manuellement cette tâche à exécuter (peut-être pour des fins de dépannage, vous pouvez utiliser le Get-ScheduledJob
applet de commande comme ceci:
(Get-ScheduledJob -Name 'SomeJobName').StartJob()
# 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 )