Comment exécuter un script PowerShell lorsque l'ordinateur démarre?

j'ai un script PowerShell qui surveille un dossier image. 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 n'ai pas pu le faire fonctionner.

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

  2. Créer un raccourci et le déposer dans le dossier de démarrage. Pas de chance.

    %SystemRoot%SysWOW64WindowsPowerShellv1.0powershell.exe -File "C:DocFilesFileMonitor.ps1"
    

    ou %SystemRoot % system32WindowsPowerShellv1.0powershell.exe Fichier "C:DocFilesFileMonitor.ps1"

    Voici mon script PowerShell:

    $folder = "C:DocFiles"
    $dest = "C:DocFilesimages"
    $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:DocFiles*.jpg C:DocFilesimages
    }
    
  3. j'ai aussi essayé d'ajouter une tâche de base en utilisant taskschd.MSC. Il ne fonctionne toujours pas.

    voici ce que j'ai trouvé, et peut-être que cela aidera à le déboguer.

    Si j'ouvre une fenêtre PowerShell et exécuter le script là, ça fonctionne. Mais si je l'exécute dans une invite CMD,

    powershell.exe -File "C:DocFilesFileMonitor.ps1"
    

    Il ne sera pas travail. Je ne suis pas sûr que ce soit un problème de permission ou autre chose.

    BTW, J'ai PowerShell 3.0 installé, et si je tape $ host.version, il vous montre les 3 là. Mais mon powershell.exe semble comme il est toujours v1.0.

    %SystemRoot%system32WindowsPowerShellv1.0powershell.exe
    
29
demandé sur Peter Mortensen 2013-12-14 00:17:58

6 réponses

j'ai finalement obtenu que mon script PowerShell s'exécute 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 à l'invite de commande (par exemple startup.cmd).

le second fichier est celui qui doit être exécuté lorsque l'ordinateur démarre, et il suffit de copier-coller le .ps1 vers le dossier de démarrage ne fonctionnera pas, parce que cela n'exécute pas réellement le script - il seulement ouvre le fichier avec le bloc-notes. Vous devez exécuter l' .le cmd qui exécutera lui-même le .ps1 utilisant PowerShell. Ok, assez bavardé et sur les pas:

  1. créer votre .ps1 script et placez-le dans un dossier. Je l'ai mis sur mon bureau pour la simplicité. Le chemin devrait ressembler à quelque chose comme ceci:

C:\Users\<nom_utilisateur>\Desktop\script.ps1

  1. Créer un .cmd fichier et le placer dans

C:\Users\<user_name>\AppData\Roaming\Microsoft\Windows\Menu Démarrer\Programmes\Démarrage\démarrage.cmd

faire ceci exécutera le fichier cmd à chaque démarrage. Voici un lien de comment créer un .fichier cmd si vous avez besoin d'aide.

  1. ouvrez le .fichier cmd avec un éditeur de texte et entrez ce qui suit lignes:

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

Cela va faire deux choses:

  1. Réglez la Politique d'exécution de votre PowerShell à unlimited. Cela est nécessaire pour exécuter des scripts, sinon PowerShell ne le fera pas.
  2. utilisez PowerShell pour exécuter le .script ps1 trouvé dans le chemin spécifié.

ce code est spécifiquement pour PowerShell v1.0. Si vous utilisez PowerShell v2.C'est peut-être un peu différent. En tout cas, vérifier source pour les .code cmd.

  1. Enregistrer le .fichier cmd

Maintenant que vous avez votre .ps1 et .les fichiers cmd dans leurs chemins respectifs et avec le script pour chacun, vous êtes prêts.

25
répondu Helpy-Helperton 2015-11-03 15:53:55

vous pouvez le configurer comme une tâche programmée, et configurer le déclencheur de tâche pour "au démarrage"

9
répondu mjolinor 2013-12-13 20:22:45

ce que je fais c'est créer un raccourci que je place dans shell:startup.

Le raccourci est la suivante:

Objectif: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command "C:\scripts\script.ps1"

(en remplaçant les scripts\scripts.ps1 avec ce que vous avez besoin)

Démarrer Dans: C:\scripts

(remplacer les scripts avec le dossier qui a votre script)

3
répondu haboutnnah 2016-12-31 06:24:32

Copiez ps1 dans ce dossier, et créez-le si nécessaire. Il s'exécute à chaque démarrage (avant que l'ouverture de session de l'utilisateur ne se produise).

C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup

cela peut aussi être fait par GPEDIT.msc si disponible sur votre os build (OS de niveau inférieur peut-être pas).

3
répondu Knuckle-Dragger 2017-09-21 21:40:01

j'ai un script qui démarre aussi un observateur du système de fichiers, mais une fois la fenêtre du script fermée, l'observateur meurt. Il fonctionnera toute la journée si je le démarre à partir d'une fenêtre powershell et le laisse ouvert, mais à la minute où je le ferme le script s'arrête de faire ce qu'il est censé faire.

Vous devez démarrer le script et le garder powershell ouvert.

J'ai essayé de nombreuses façons de le faire, mais celui qui a réellement fonctionné était 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
}

coller cela en haut du script est ce qui l'a fait fonctionner.

Je démarre le script depuis la ligne de commande avec

powershell.exe -noexit -command "& \path\to\script.ps1"

1
répondu Dan 2016-05-25 16:47:14

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

  1. cliquez sur le bouton Windows (Windows-button + r)
  2. entrez ceci:

shell: startup

  1. Créer un nouveau raccourci par un clic droit et dans le menu contextuel, choisissez l'élément de menu: Nouveau=>Raccourci

  2. Créer un raccourci vers votre script, e.g:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Commande "C:\Users\someuser\Documents\WindowsPowerShell\Scripts\somesscript.ps1"

notez l'utilisation de - NoProfile Dans le cas où vous mettez beaucoup d'initialisation dans votre fichier $profile, il est inefficace de charger cela pour juste exécuter un script Powershell. Le-NoProfile sautera le chargement de votre fichier de profil et est intelligent pour spécifier, s'il n'est pas nécessaire de l'exécuter avant le script Powershell est exécutée.

Ici vous voyez un tel raccourci (.lnk fichier avec une Powershell icône de raccourci glyphe):

0
répondu Tore Aurstad 2018-09-24 08:04:51