it-swarm.com.de

Wie führe ich ein PowerShell-Skript aus, wenn der Computer gestartet wird?

Ich habe ein PowerShell-Skript, das einen Bildordner überwacht. Ich muss einen Weg finden, dieses Skript automatisch auszuführen, nachdem der Computer gestartet wurde.

Ich habe bereits die folgenden Methoden ausprobiert, konnte es aber nicht zum Laufen bringen.

  1. Verwenden Sie msconfig und fügen Sie das PowerShell-Skript zum Start hinzu. Ich kann das PowerShell-Skript jedoch nicht in dieser Liste finden.

  2. Erstellen Sie eine Verknüpfung und legen Sie sie im Startordner ab. Kein Glück.

    %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
    

    oder % SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -Datei "C:\Doc\Files\FileMonitor.ps1"

    Hier ist mein PowerShell-Skript:

    $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. Ich habe auch versucht, eine grundlegende Aufgabe mit taskschd.msc hinzuzufügen. Es funktioniert immer noch nicht.

    Hier ist was ich gefunden habe, und vielleicht hilft das beim Debuggen.

    Wenn ich ein PowerShell-Fenster öffne und das Skript dort ausführen, funktioniert es. Aber wenn ich es in einem CMD Prompt ausführen,

    powershell.exe -File "C:\Doc\Files\FileMonitor.ps1"
    

    Es wird nicht funktionieren. Ich bin nicht sicher, ob es sich um ein Erlaubnisproblem oder etwas anderes handelt.

    BTW, ich habe PowerShell 3.0 installiert, und wenn ich $ Host.version eingebe, wird dort 3 angezeigt. Aber meine powershell.exe scheint immer noch v1.0 zu sein.

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    
34
qinking126

Endlich habe ich mein PowerShell-Skript zur automatischen Ausführung bei jedem Start. Sie müssen zwei Dateien erstellen: Die erste ist das Powershell-Skript (z. B. script.ps1) und die zweite ist eine .cmd-Datei, die Befehle enthält, die für den Befehl Prompt (z. B. startup.cmd) ausgeführt werden.

Die zweite Datei muss beim Start des Computers ausgeführt werden. Das Kopieren und Einfügen von .ps1 in den Startordner funktioniert nicht, da das Skript nicht wirklich ausgeführt wird. Es wird nur die Datei mit Notepad geöffnet. Sie müssen die .cmd-Datei ausführen, die die .ps1-Datei mit PowerShell ausführt. Ok, genug plappern und weiter zu den Stufen:

  1. Erstellen Sie Ihr .ps1-Skript und legen Sie es in einem Ordner ab. Ich habe es der Einfachheit halber auf meinen Desktop gestellt. Der Pfad würde ungefähr so ​​aussehen:

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

  1. Erstellen Sie eine .cmd-Datei und platzieren Sie sie in 

C:\Users\<Benutzername>\AppData\Roaming\Microsoft\Windows\Startmenü\Programme\Startup\startup.cmd

Dadurch wird die cmd-Datei jedes Mal beim Start ausgeführt. Hier ist ein Link zum Erstellen einer .cmd-Datei wenn Sie Hilfe benötigen.

  1. Öffnen Sie die .cmd-Datei mit einem Texteditor und geben Sie die folgenden Zeilen ein:

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

Dies wird zwei Dinge tun: 

  1. Setzen Sie die Ausführungsrichtlinie Ihrer PowerShell auf Unbeschränkt. Dies ist zum Ausführen von Skripts erforderlich. Andernfalls führt PowerShell dies nicht aus.
  2. Verwenden Sie PowerShell, um das .ps1-Skript im angegebenen Pfad auszuführen. 

Dieser Code gilt speziell für PowerShell v1.0. Wenn Sie PowerShell v2.0 ausführen, kann es etwas anders sein. Überprüfen Sie auf jeden Fall diese Quelle auf den .cmd-Code.

  1. Speichern Sie die .cmd-Datei

Nun, da Sie Ihre .ps1- und .cmd-Dateien in ihren jeweiligen Pfaden und mit dem Skript für jeden Pfad haben, sind Sie alle eingestellt.

32
Helpy-Helperton

Sie können es als geplante Task einrichten und den Task-Auslöser für "Beim Start" festlegen.

9
mjolinor

Was ich mache, ist eine Verknüpfung zu erstellen, die ich in Shell: Start einstelle.

Die Verknüpfung hat folgende Eigenschaften:

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

(Ersetzen Sie scripts\scripts.ps1 durch das, was Sie brauchen)

Start in: C:\scripts 

(Ersetzen von Skripten durch Ordner, die Ihr Skript enthalten)

4
haboutnnah

Kopieren Sie ps1 in diesen Ordner und erstellen Sie es gegebenenfalls. Sie wird bei jedem Start (vor der Benutzeranmeldung) ausgeführt.

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

Es kann auch über GPEDIT.msc durchgeführt werden, wenn es in Ihrem Betriebssystem verfügbar ist (Betriebssystem auf niedrigerer Ebene möglicherweise nicht).

3
Knuckle-Dragger

Sie können eine Scheduler-Task erstellen, die beim Start automatisch ausgeführt wird, auch wenn der Benutzer nicht angemeldet ist:

schtasks /create /tn "FileMonitor" /sc onstart /delay 0000:30 /rl highest /ru system /tr "powershell.exe -file C:\Doc\Files\FileMonitor.ps1"

Führen Sie diesen Befehl einmal in einer PowerShell als Administrator aus, und es wird eine Zeitplanaufgabe für Sie erstellt. Sie können die Aufgabe folgendermaßen auflisten:

schtasks /Query /TN "FileMonitor" /V /FO List

oder löschen Sie es

schtasks /Delete /TN "FileMonitor"
2
hirschnase

Stellen Sie sicher, dass Sie immer dann, wenn PowerShell automatisch/im Hintergrund/nicht interaktiv ausgeführt werden soll, die Parameter -ExecutionPolicy Bypass zu PowerShell.exe

PowerShell.exe -ExecutionPolicy Bypass

1
bcdady

Ich habe ein Skript, das auch einen Dateisystem-Watcher startet, aber sobald das Skriptfenster geschlossen ist, stirbt der Watcher. Es läuft den ganzen Tag, wenn ich es aus einem Powershell-Fenster starte und es offen lasse, aber sobald ich es schließe, stoppt das Skript, was es soll.
Sie müssen das Skript starten und die Powershell geöffnet lassen.
Ich habe auf verschiedene Weise versucht, dies zu tun, aber die, die tatsächlich funktioniert hat, war von 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
}

Wenn Sie das oben in das Skript einfügen, hat es funktioniert.
Ich starte das Skript von der Kommandozeile aus mit

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

1
Dan

Im Task-Manager können Sie auf der Registerkarte "Start" Skripts und weitere für den Start geplante Skripts anzeigen. So fügen Sie den geplanten Startelementen ein neues Element hinzu. 

Öffnen Sie zunächst den Explorer in der Shell: Startposition über die Starttaste => Ausführen:

Explorer Shell: Start

Klicken Sie mit der rechten Maustaste in diesen Ordner und wählen Sie im Kontextmenü eine neue Verknüpfung aus. Gebe folgendes ein: 

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Befehl "C:\meinOrdner\somescript.ps1"

Dadurch wird ein Powershell-Skript gestartet, ohne dass Sie Ihre $ Profil-Skripts starten müssen, um die Ausführung zu beschleunigen. Dadurch wird sichergestellt, dass das Powershell-Skript gestartet wird. 

Der Shell: Startordner befindet sich in:

$ env: APPDATA\Microsoft\Windows

Und dann in den Ordner:

Startmenü\Programme\Autostart

Wie üblich macht Microsoft die Dinge für uns etwas umständlich, wenn ein Pfad Leerzeichen enthält. In diesem Fall müssen Sie den gesamten Pfad in Anführungszeichen setzen oder in der Powershell die Tabulatortaste drücken.

0
Tore Aurstad

 enter image description here Ein relativ kurzer Weg zum Angeben eines Powershell-Skripts, das beim Start in Windows ausgeführt werden soll, könnte sein:

  1. Klicken Sie auf die Windows-Schaltfläche (Windows-Taste + r). 
  2. Geben Sie folgendes ein:

Shell: Start

  1. Erstellen Sie mit Rechtsklick eine neue Verknüpfung und wählen Sie im Kontextmenü den Menüpunkt: Neu => Verknüpfung

  2. Erstellen Sie eine Verknüpfung zu Ihrem Skript, z. B .: 

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

Beachten Sie die Verwendung von -NoProfile Falls Sie viel Initialisierung in Ihre $ -Profildatei schreiben, ist es nicht effizient, dies zu laden, um nur ein Powershell-Skript auszuführen. Das -NoProfile überspringt das Laden Ihrer Profildatei und ist intelligent zu spezifizieren, wenn es nicht erforderlich ist, sie auszuführen, bevor das Powershell-Skript ausgeführt wird.

Hier sehen Sie eine solche Verknüpfung (.lnk-Datei mit Powershell-Symbol mit Abkürzungszeichen):

0
Tore Aurstad

Das hat bei mir funktioniert. Eine geplante Aufgabe mit den folgenden Details wurde erstellt: Auslöser: Beim Start

Aktionen: Programm/Skript: powershell.exe Argumente: -datei 

0
Justin D