Ein Script auf einem oder mehreren, entfernten Rechnern ausführen - Wie kann ich es umsetzen ?
Guten Morgen.
Ich habe eine Frage an erfahrene User von euch.
Habe da etwas spezielles nur leider weiss ich nicht, wie ich es am Besten umsetzen soll.
Es ist ein Script, welches von meinem Rechner auf dem Remote Rechner kopiert, ausgeführt und anschließend wieder gelöscht werden soll.
Es besteht aus 4 Dateien, die sich auf dem Remote Rechner in einem Verzeichnis befinden müssen.
Es sollte wie folgt ausgeführt werden:
1. 4 Dateien auf den Remote-Rechner in das Verzeichnis C:´\SCRIPT kopieren
2. Von meinem Rechner aus den Befehl mitgeben, daß aus dem C:\SCRIPT des Remote-Rechners die Datei Starten.cmd ausgeführt werden soll und zwar mit Administrator Rechten
3. Am besten wäre es wenn ich auf meinem Rechner die Ausgabe des Scripts sehen würde, aber ist kein Muss.
4. Sobald das Script abgearbeitet wurde, soll sich das komplette Verzeichnis C:\SCRIPT auf dem Remote-Rechner löschen
Wie bekomme ich sowas hin?
Mile Grazie
Ich habe eine Frage an erfahrene User von euch.
Habe da etwas spezielles nur leider weiss ich nicht, wie ich es am Besten umsetzen soll.
Es ist ein Script, welches von meinem Rechner auf dem Remote Rechner kopiert, ausgeführt und anschließend wieder gelöscht werden soll.
Es besteht aus 4 Dateien, die sich auf dem Remote Rechner in einem Verzeichnis befinden müssen.
Es sollte wie folgt ausgeführt werden:
1. 4 Dateien auf den Remote-Rechner in das Verzeichnis C:´\SCRIPT kopieren
2. Von meinem Rechner aus den Befehl mitgeben, daß aus dem C:\SCRIPT des Remote-Rechners die Datei Starten.cmd ausgeführt werden soll und zwar mit Administrator Rechten
3. Am besten wäre es wenn ich auf meinem Rechner die Ausgabe des Scripts sehen würde, aber ist kein Muss.
4. Sobald das Script abgearbeitet wurde, soll sich das komplette Verzeichnis C:\SCRIPT auf dem Remote-Rechner löschen
Wie bekomme ich sowas hin?
Mile Grazie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270701
Url: https://administrator.de/contentid/270701
Ausgedruckt am: 25.11.2024 um 13:11 Uhr
24 Kommentare
Neuester Kommentar
Guten Morgen
Schau dir mal die PsTools an, speziell PsExec
Ich denke das ist genau das, was du suchst, damit habe ich ähnliche Dinge auch schon gemacht.
Gruss
Schau dir mal die PsTools an, speziell PsExec
Ich denke das ist genau das, was du suchst, damit habe ich ähnliche Dinge auch schon gemacht.
Gruss
Hallo Estefania,
hier zwei Beispiel mit Powershell:
Die nötigen Firewallausnahmen für PSExec(Datei- und Druckerfreigabe reicht) und das Ausführen des Scripts als ein User der auf dem Zielrechner Admin-Rechte hat, sind natürlich Voraussetzung für das Funktionieren. Braucht das Script elevated Rights kann man psexec mit dem Parameter /s mitteilen das das Script mit dem System Account ausgeführt werden soll.
Viel Erfolg
Grüße Uwe
hier zwei Beispiel mit Powershell:
Variante 1: Nativ mit Powershell und aktiviertem PSRemoting auf den Clients
(Die Liste der Rechner kann man natürlich auch aus dem AD oder einer Textdatei auslesen, das dient hier nur als einfaches Beispiel)# Script mit einem Account ausführen der Admin-Rights auf den Clients besitzt (z.B. einem Domain-Admin)
# Für die Funktion muss PSRemoting auf den Clients aktiviert werden ('Enable-PSRemoting -Force' auf dem Client ausführen reicht wenn der PS in einer Domäne hängt)
$computers = @("Rechner1",'Rechner2','Rechner3')
$computers |%{
Write-host "Starte Skript auf PC '$_'" -ForegroundColor Green
# Ordner auf Zielrechner anlegen
md "\\$_\c$\Scripts" -Force -EA SilentlyContinue | out-null
# Script auf Remote-PC kopieren
copy-item 'C:\Share\test.cmd' "\\$_\c$\Scripts" -Force
# Script auf Remote-PC ausführen
Invoke-Command -ComputerName $_ -SccriptBlock {Start-Process "C:\Sripts\test.cmd"}
}
Variante 2: Mit Kombination aus Powershell und PSExec
$computers = @("Rechner1",'Rechner2','Rechner3')
$computers |%{
Write-host "Starte Skript auf PC '$_'" -ForegroundColor Green
# Ordner auf Zielrechner anlegen
md "\\$_\c$\Scripts" -Force -EA SilentlyContinue | out-null
# Script auf Remote-PC kopieren
copy-item 'C:\Share\test.cmd' "\\$_\c$\Scripts" -Force
# Script auf Remote-PC ausführen (mit psexec)
& psexec "\\$_" "C:\Scripts\test.cmd"
}
Viel Erfolg
Grüße Uwe
Kann ich das in eine auszuführende Datei einpacken und die dann ausführen ohne die Befehle einzeln eingeben zu müssen? So eine Script Datei.. wie lautet die denn für PowerShell ?
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine administrative Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
- Alternativ lässt sich ein Script auch ohne das globale Ändern der ExecutionPolicy ausführen indem man die Policy als Parameter auf der Kommandozeile mitgibt:
powershell.exe -ExecutionPolicy ByPass -File "C:\Pfad\Script.ps1"
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Starten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
powershell -?
in einer Konsole an.Starten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"Zitat von @Estefania:
wenn ich es starte dann wird die vbs datei im C:\SCRIPT nicht genommen,
stattdessen sucht windows im \windows\system32 danach
wenn ich es starte dann wird die vbs datei im C:\SCRIPT nicht genommen,
stattdessen sucht windows im \windows\system32 danach
schreibe in deine cmd-Datei vorher einfach ein cd C:\SCRIPT oder gib den vollen Pfad (C:\SCRIPT\datei.vbs) beim Aufruf an
Gruss
Zitat von @Estefania:
ja stimmt. Das hat dann auch geklappt.
Jetzt fehlt mir nur noch die Info wie ich eine Textdatei mit allen Computerrechnern erstellen soll, so daß es dann
nacheinander abgearbeitet wird.
Alle Computernamen untereinander in eine Textdatei schreiben, und so kannst du sie dann einlesenja stimmt. Das hat dann auch geklappt.
Jetzt fehlt mir nur noch die Info wie ich eine Textdatei mit allen Computerrechnern erstellen soll, so daß es dann
nacheinander abgearbeitet wird.
$computers = gc 'c:\computers.txt'
Import-Module ActiveDirectory
Get-AdComputer -Filter * | select -Expand Name | out-file 'c:\computers.txt'
Zitat von @Estefania:
Leider hat sich ein weiteres Problem eingeschlichen.. die vbs datei kann nicht per Remote ausgeführt werden.
Permission Denied !!!
Obwohl ich als Domänen-Benutzer in der Gruppe der lokalen Administratoren auf dem Zielrechner bin
Kann ich in dem Powershell Script irgendwie einen anderen Account mitgeben? z.B. lokalen ?
Wenn bei deinem Script die UAC anschlägt musst du es bei psexec mit dem Parameter /s ausführen. Oder den Command Remote elevated ausführen:Leider hat sich ein weiteres Problem eingeschlichen.. die vbs datei kann nicht per Remote ausgeführt werden.
Permission Denied !!!
Obwohl ich als Domänen-Benutzer in der Gruppe der lokalen Administratoren auf dem Zielrechner bin
Kann ich in dem Powershell Script irgendwie einen anderen Account mitgeben? z.B. lokalen ?
Powershell Script mit Benutzerabfrage
Psexec kennt ebenfalls Parameter für Username und Passwort.
Der Computername steht ja schon in der Pipeline-Variablen der Schleife $_ ! Er enthält immer den aktuellen Computernamen welcher gerade verarbeitet wird. Also kannst du ihn nutzen um den Account zusammen zu bauen
"$_\Administrator"
Zitat von @Estefania:
Ich habe diese Variable hinter dem psexec Befehl gesetzt. Ich müsste aber schon von anfang an alles mit diesem lokalem
account ausführen wie z.B. das kopieren der dateien auf den zielrechner usw. Kann man sowas irgendwie in dem Script am Anfang
hinterlegen !?
Das geht dann aber nicht, weil wenn du z.B. den Copy-Befehl mit den local Admin rights des anderen Rechners ausführen würdest hätte dieser keine Berechtigung auf dein lokales Laufwerk zuzugreifen Ich habe diese Variable hinter dem psexec Befehl gesetzt. Ich müsste aber schon von anfang an alles mit diesem lokalem
account ausführen wie z.B. das kopieren der dateien auf den zielrechner usw. Kann man sowas irgendwie in dem Script am Anfang
hinterlegen !?
Splite das ganze am besten auf in Domain Rechner und Non-Domain-Rechner... oder mappe das Laufwerk des anderen Rechners mit net use ...
Das entfernte Laufwerk im Script mit net use mappen und die Files drauf kopieren ...
Zitat von @Estefania:
Dann müsste ich es bei jedem Rechner machen, was sehr mühselig wäre. Gibt es da keine besser Lösung für ?
Du verstehst mich falsch... Du mappst das Laufwerk des entfernten Rechners im Script also auf dem Rechner wo du das Script ausführst ! Also keine Arbeit auf den Clients nötig ...Dann müsste ich es bei jedem Rechner machen, was sehr mühselig wäre. Gibt es da keine besser Lösung für ?
Doch kannst du ... es gibt halt ein paar Dinge zu beachten. Aber dazu gibt's ja Google.
https://social.technet.microsoft.com/Forums/windowsserver/en-US/5428116d ...
Wir machen hier ja kein Grundkurs Powershell ...
https://social.technet.microsoft.com/Forums/windowsserver/en-US/5428116d ...
Wir machen hier ja kein Grundkurs Powershell ...
Zitat von @Estefania:
Mit dem Verbinden des Laufwerkes hat es geklappt und somit konnte ich die Daten rüberkopieren.
Wenn ich nur einen Rechner angebe, dann funktioniert es einwandfrei.
Sobald es einen 2-ten gibt, führt es die Arbeiten nicht durch beim 2-ten.
Du solltest ja das Laufwerk wieder trennen nachdem du kopiert hast sonst kann das Laufwerk ja nicht erneut zugewiesen werden! Mit dem Verbinden des Laufwerkes hat es geklappt und somit konnte ich die Daten rüberkopieren.
Wenn ich nur einen Rechner angebe, dann funktioniert es einwandfrei.
Sobald es einen 2-ten gibt, führt es die Arbeiten nicht durch beim 2-ten.
net use x: /del
Gibt es ein Kommando wo ich vielleicht den Sprung zum nächsten Rechner verzögern kann?
Unter Windows hat es diesen Befehl "wait" gegeben.. Sowas ähnliches unter PowerShell !?
Powershell wartet bis der Befehl beendet wurde. Das wird also nicht dein Problem gewesen sein, eher meine Vermutung von oben das du das Laufwerk nicht getrennt hast.Unter Windows hat es diesen Befehl "wait" gegeben.. Sowas ähnliches unter PowerShell !?
Ansonsten gibt es noch start-process mit dem Parameter -wait oder auch sleep(3) um eine gewisse Zeit zu warten.
Dir sollte schon klar sein, dass das obige Script natürlich nur eine Basisvariante ist, welche man beliebig erweitern kann um z.B. noch zu überprüfen ob ein Rechner überhaupt online ist ! (Wie z.B. hier demonstriert.)
Etwas solltest du sich dann vielleicht doch mit Powershell beschäftigen (Ich kann es nur wärmstens empfehlen, Windows Systeme wirst du in Zukunft nicht mehr ohne Powershell vernünftig administrieren können) . Bei Bedarf kann ich dir auch gerne gegen Bezahlung ein erweitertes Script schreiben, wenn das nicht so dein Ding ist.
Grüße Uwe