Taskplaner-Powershell-Skript - Wie Man

Taskplaner-Powershell-Skript

wie Sie ein Programm von einem Powershell-Skript aus ausführen und es mithilfe des Task-Schedulers ausführen

5 Schritte insgesamt

Schritt 1: Skript erstellen

Schreiben Sie das Powershell-Skript, um Ihr Programm aufzurufen
Ich habe dies für die Synchronisierung von Servern an entfernten Standorten mit dem Datencenter in der Zentrale geschrieben:

#custom script, um das syncback-Gruppenprofil auszuführen und die kombinierten Protokolldateien per E-Mail zu senden

$ today = get-date -Format "yyddMM"
if ([intptr] :: size -eq 8) {
#OS ist 64bit
$ AppPath = "$ Env: ProgramFiles (x86) Syncback"
}
sonstiges
#OS ist nicht 64bit
$ AppPath = "$ Env: ProgramFiles Syncback"
}
$ Servername = $ env: Computername
$ logname = $ today + "_" + $ Servername + "_Synclog.log"

Der Befehl #next muss bei der ersten Verwendung dieses Skripts nur einmal ausgeführt werden
# new-EventLog -LogName Anwendung -source SyncBack

cd $ AppPath
invoke-expression ". SyncBack.exe -m SyncData" | out-null
Write-EventLog -LogName-Anwendung -source SyncBack -eventid 1000 -Eintragstypinformationen -Nachricht "SyncBack-Prozess beendet"
gci "$ AppPath Sync * log.txt" | Get-Content | add-content "$ AppPath $ logname"

Send-MailMessage -An '[email protected]' -From '[email protected]' -SmtpServer 'Mailserver' -Subject "Synchronisierungsaufgabe auf $ ServerName abgeschlossen" -Body "im Anhang der Synchronisierungsprotokolldatei '-Attachments $ logname

Schritt 2: Bearbeiten Sie das Skript nach Ihren Bedürfnissen

Beachten Sie jedoch, dass dieses Skript noch in Arbeit ist
Sie müssen einige Variablen wie die E-Mail-Adresse, an die Sie sie senden, ändern

Wenn Sie mit syncback vertraut sind, wissen Sie auch, wie Sie den Namen Ihres aufgerufenen Profils und seiner Protokolldateien berücksichtigen

Der Befehl invoke-expression, der an out-null weitergeleitet wurde, stellt sicher, dass das Skript wartet, bis der Prozess beendet ist
Sie können die Ausgabe Ihres aufgerufenen Befehls auch in eine Textdatei oder sogar in eine Variable übertragen, wenn Sie sie für die spätere Verwendung während des Skripts verwenden möchten

Das write-eventlog ist eine nette Sache, damit Sie die Ausgabe des Befehls oder Ihre eigene Beschreibung in das Anwendungsereignisprotokoll auf dem Server schreiben können
Sie müssen den Eintrag zuerst mit dem Befehl new-eventlog registrieren

Ich muss immer noch eine if-Blockierung implementieren, um Erfolg oder Misserfolg in das Ereignisprotokoll zu schreiben
Dies ist besonders praktisch, da wir System Center zur Überwachung aller Server verwenden
Auf diese Weise kann ich eine Warnung auslösen, wenn eine solche Aufgabe fehlschlägt

Schritt 3: PowerShell-Ausführungsrichtlinie

Stellen Sie sicher, dass Sie die Ausführungsrichtlinie in "Remotesigned" ändern. Andernfalls wird Ihr Skript nicht ausgeführt, wenn Sie von einem anderen Computer kopiert werden und der folgende Fehler angezeigt wird:

Die Datei C: windows SyncData.ps1 kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter "get-help about_signing".

Geben Sie set-executionpolicy remotesigned ein und bestätigen Sie mit Ja

Schritt 4: Planen Sie das Powershell-Skript

Dies ist der Befehlszeilenaufruf für das Powershell-Skript:

C: WINDOWS system32 WindowsPowerShell v1.0 powershell.exe - Befehl "& 'c: windows SyncData.ps1'"

Der Windows-Ordner ist normalerweise ein bekannter Pfad. Sie müssen also nicht den vollständigen Pfad angeben. Aus diesem Grund verwende ich ihn, aber Sie können jeden beliebigen anderen Ordner verwenden, solange Sie den vollständigen Pfad des Skripts angeben

Schritt 5: Syncback-spezifische Einstellungen

Wenn Sie syncback aufrufen, müssen Sie für die Ausführung der Aufgabe dasselbe Konto verwenden wie beim Erstellen der Profile

syncback speichert diese Profileinstellungen in der Benutzerregistry. Wenn Sie ein anderes Konto verwenden, können Sie diese Einstellungen nicht lesen und schlagen bei der Ausführung fehl

Am einfachsten verwenden Sie ein Administratorkonto, um sich beim Server anzumelden, die Profile zu erstellen und diese Anmeldeinformationen für die Ausführung der Aufgabe einzugeben

Alternativ können Sie diese Einstellungen auch in die Benutzerregistry des Kontos importieren, das Sie für die geplante Aufgabe verwenden möchten

Hier erfahren Sie, wie Sie mit powershell andere Programme INVOKEIEREN, die Sie als Aufgabe planen möchten

Der Grund, warum ich zur Verwendung von Powershell gewechselt bin, anstatt das Programm selbst aufzurufen, besteht darin, dass ich mehrere Programme kombinieren kann, um nacheinander mit nur einem Zeitplan ausgeführt zu werden
Durch die Verwendung des Pipes out-null wird sichergestellt, dass das erste Programm abgeschlossen ist, bevor das nächste Programm aufgerufen wird

In diesem Fall war es schön, die Logfiles zu einer großen Datei zusammenfassen und an eine überwachte Mailbox senden zu können