J'ai un script PowerShell qui surveille un dossier d'images. Je dois trouver un moyen d'exécuter ce script automatiquement après le démarrage de l'ordinateur.
J'ai déjà essayé les méthodes suivantes, mais je ne pouvais pas le faire fonctionner.
Utilisez msconfig et ajoutez le script PowerShell au démarrage, mais je ne trouve pas le script PowerShell dans cette liste.
Créez un raccourci et déposez-le dans le dossier de démarrage. Pas de chance.
%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
ou % SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
Voici mon script PowerShell:
$folder = "C:\\Doc\\Files"
$dest = "C:\\Doc\\Files\\images"
$filter = "*.jpg"
$fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{
IncludeSubDirectories=$false
NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite'
}
$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
Start-Sleep -s 10
Move-Item -Path C:\Doc\Files\*.jpg C:\Doc\Files\images
}
J'ai également essayé d'ajouter une tâche de base à l'aide de taskschd.msc. Cela ne fonctionne toujours pas.
Voici ce que j'ai trouvé, et cela aidera peut-être à le déboguer.
Si j'ouvre une fenêtre PowerShell et exécute le script à cet endroit, cela fonctionne. Mais si je le lance dans une invite CMD,
powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
Ça ne marchera pas. Je ne suis pas sûr que ce soit un problème de permission ou autre chose.
En passant, PowerShell 3.0 est installé sur mon ordinateur, et si je tape $ Host.version, il en indiquera 3. Mais mon powershell.exe semble encore être v1.0.
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
J'ai enfin eu mon script PowerShell pour s'exécuter automatiquement à chaque démarrage. Vous devrez créer deux fichiers: le premier est le script Powershell (par exemple, script.ps1
) et le second est un fichier .cmd qui contiendra des commandes qui s'exécuteront sur la commande Prompt (par exemple, startup.cmd
).
Le deuxième fichier correspond à ce qui doit être exécuté au démarrage de l'ordinateur. Un simple copier-coller du fichier .ps1 dans le dossier de démarrage ne fonctionnera pas, car cela n'exécute pas le script. Il ouvre uniquement le fichier avec le Bloc-notes. Vous devez exécuter le fichier .cmd qui exécutera lui-même le fichier .ps1 à l'aide de PowerShell. Ok, assez de babillage et sur les marches:
C:\Utilisateurs\<nom_utilisateur>\Bureau\script.ps1
C:\Utilisateurs\<nom_utilisateur>\AppData\Roaming\Microsoft\Windows\Menu Démarrer\Programmes\Démarrage\startup.cmd
Cela exécutera le fichier cmd à chaque démarrage. Voici un lien sur la façon de créer un fichier .cmd si vous avez besoin d’aide.
Ouvrez le fichier .cmd avec un éditeur de texte et entrez les lignes suivantes:
PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
PowerShell C:\Users\<user_name>\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
Cela fera deux choses:
Ce code est spécifiquement destiné à PowerShell v1.0. Si vous utilisez PowerShell v2.0, cela pourrait être un peu différent. Dans tous les cas, vérifiez cette source pour le code .cmd.
Maintenant que vous avez vos fichiers .ps1 et .cmd dans leurs chemins respectifs et avec le script pour chacun, vous êtes tous ensemble.
Vous pouvez le configurer en tant que tâche planifiée et définir le déclencheur de tâche sur "Au démarrage".
Ce que je fais est de créer un raccourci que je place dans Shell: démarrage.
Le raccourci est le suivant:
Cible: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"
(en remplaçant scripts\scripts.ps1 par ce dont vous avez besoin)
Commencer dans: C:\scripts
(remplacement des scripts par le dossier contenant votre script)
Copiez ps1 dans ce dossier et créez-le si nécessaire. Il sera exécuté à chaque démarrage (avant la connexion de l'utilisateur).
C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
En outre, cela peut être fait via GPEDIT.msc si disponible sur votre version de système d'exploitation (le système d'exploitation de niveau inférieur peut ne pas l'être).
J'ai également un script qui démarre un observateur de système de fichiers, mais une fois la fenêtre de script fermée, l'observateur meurt. Il fonctionnera toute la journée si je le lance à partir d’une fenêtre de l’auto-écran et le laisse ouvert, mais dès que je le ferme, le script cesse de faire ce qu’il est censé faire.
Vous devez démarrer le script et le laisser garder PowerShell ouvert.
J’ai essayé de nombreuses manières de le faire, mais celle qui a vraiment fonctionné était celle de http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed
param ( $Show )
if ( !$Show )
{
PowerShell -NoExit -File $MyInvocation.MyCommand.Path 1
return
}
C'est ce qui a fait que cela a été collé en haut du script.
Je lance le script en ligne de commande avec
powershell.exe -noexit -command "& \path\to\script.ps1"
Vous pouvez voir les scripts et plus programmés pour le démarrage dans le Gestionnaire des tâches dans l'onglet Démarrage. Voici comment ajouter un nouvel élément aux éléments de démarrage planifiés.
Tout d’abord, ouvrez Explorer vers Shell: emplacement de démarrage via start-button => run:
Explorateur Shell: démarrage
Faites un clic droit dans ce dossier et sélectionnez un nouveau raccourci dans le menu contextuel. Entrez les informations suivantes:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Commande "C:\mon dossier\somescript.ps1"
Cela démarrera un script Powershell sans démarrer vos scripts $ profile pour une exécution plus rapide. Cela garantira que le script Powershell est démarré.
Le shell: le dossier de démarrage est dans:
$ env: APPDATA\Microsoft\Windows
Et puis dans le dossier:
Menu Démarrer\Programmes\Démarrage
Comme d'habitude, Microsoft rend les choses un peu lourdes pour nous lorsqu'un chemin contient des espaces, vous devez donc mettre des guillemets autour du chemin complet ou simplement cliquer sur l'onglet dans Powershell pour effectuer la saisie semi-automatique dans ce cas.
Un chemin relativement court pour spécifier un script Powershell à exécuter au démarrage sous Windows pourrait être:
Shell: démarrage
Créez un nouveau raccourci en cliquant avec le bouton droit de la souris et, dans le menu contextuel, choisissez l'élément de menu: Nouveau => Raccourci
Créez un raccourci vers votre script, par exemple:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command "C:\Utilisateurs\someuser\Documents\WindowsPowerShell\Scripts\somesscript.ps1"
Notez l'utilisation de -NoProfile Si vous mettez beaucoup d'initialisation dans votre fichier $ profile, il est inefficace de le charger pour exécuter un script Powershell. Le fichier -NoProfile ignorera le chargement de votre fichier de profil et vous permettra de le spécifier s'il n'est pas nécessaire de l'exécuter avant l'exécution du script Powershell.
Ici, vous voyez un tel raccourci créé (fichier .lnk avec une icône Powershell avec un glyphe de raccourci):
Cela a fonctionné pour moi. Création d'une tâche planifiée avec les détails ci-dessous: Déclencheur: au démarrage
Actions: Programme/script: powershell.exe Arguments: -file