web-dev-qa-db-fra.com

Comment exécuter un script PowerShell au démarrage de l'ordinateur?

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.

  1. Utilisez msconfig et ajoutez le script PowerShell au démarrage, mais je ne trouve pas le script PowerShell dans cette liste.

  2. 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
    }
    
  3. 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
    
34
qinking126

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:

  1. Créez votre script .ps1 et placez-le dans un dossier. Je le mets sur mon bureau pour plus de simplicité. Le chemin ressemblerait à ceci:

C:\Utilisateurs\<nom_utilisateur>\Bureau\script.ps1

  1. Créez un fichier .cmd et placez-le dans 

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.

  1. Ouvrez le fichier .cmd avec un éditeur de texte et entrez les lignes suivantes:

    PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1PowerShell C:\Users\<user_name>\Desktop\script.ps1 >> "%TEMP%\StartupLog.txt" 2>&1

Cela fera deux choses: 

  1. Définissez la stratégie d'exécution de votre PowerShell sur Non restreint. Cela est nécessaire pour exécuter des scripts, sinon PowerShell ne le fera pas.
  2. Utilisez PowerShell pour exécuter le script .ps1 présent dans le chemin spécifié. 

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.

  1. Enregistrez le fichier .cmd

Maintenant que vous avez vos fichiers .ps1 et .cmd dans leurs chemins respectifs et avec le script pour chacun, vous êtes tous ensemble.

32
Helpy-Helperton

Vous pouvez le configurer en tant que tâche planifiée et définir le déclencheur de tâche sur "Au démarrage".

9
mjolinor

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)

4
haboutnnah

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

3
Knuckle-Dragger

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"

1
Dan

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.

0
Tore Aurstad

 enter image description here Un chemin relativement court pour spécifier un script Powershell à exécuter au démarrage sous Windows pourrait être:

  1. Cliquez sur le bouton Windows (bouton Windows + r) 
  2. Entrez ceci:

Shell: démarrage

  1. 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

  2. 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):

0
Tore Aurstad

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 

0
Justin D