PowerShell PowerShell Script

Captium

Cadet 4th Year
Registriert
Apr. 2017
Beiträge
81
Hallo,

ich hab folgenden Script im Windows PowerShell ISE geschrieben:

Stop-Process -name "xxx"
Stop-Process -name "xxx"
Start-Sleep -s 15
Start-Process -FilePath "C:\DATEV\PROGRAMM\Sws\xxx.exe"

Das Programm soll 2 Prozesse schließen und eins wieder öffnen. An sich klappt das lokal top, aber sobald ich es Auf einem Windows Small Business Server 2011 probiere geht es nicht. Ich dachte vielleicht liegt das daran das ich lokal PS Version 5.1 benutze und auf dem Server PowerShell Version 2.0 genutzt wird.

Im Netz fand ich das: "Um eine Mindestversion für Ihr PowerShell-Skript einzurichten, setzen Sie „#Requires -Version 3“ als erste Zeile."
Klappt das? Oder muss ich das anders machen?
Ich würde es ja probieren, aber ich muss dann immer Bescheid geben das ich auf den Server will und dann kann darauf nicht gearbeitet werden.
Deshalb wäre es cool wenn es direkt ginge.

Vielen Dank schonmal.
Viele Grüße
 
Zuletzt bearbeitet:
"Geht nicht" gibts nicht. Welche Fehlermeldung kommt? Ich schätze es liegt an der Execution Policy.
 
wahrscheinlich liegt es an den Execute-Policies...
Versuch mal am Server "Set-ExecutionPolicy Unrestricted" und teste ob es danach klappt (Achtung, das kann sicherheitstechnisch für Euch nicht in Ordnung sein)
 
Die Execution Policy habe ich schon auf Unrestricted gesetzt. Eventuell habe ich es aus dem Kontext gerissen. Wir arbeiten mit einem RMM wo ich mein Script in einen Job tun kann und dieser dieses Script immer wieder ausführt.
Aber Sobald ich es teste, passiert nichts. Die Prozesse beenden und starten nicht neu. Mein Script ist einfach eine x.ps1 Datei. Brauch ich noch ein Installer und/oder eine Ausführungsdatei?
 
wie rufst Du das Skript auf? einfach nur die .ps1 Datei?

Versuchs mal:
PowerShell.exe -Command "C:\Temp\script.ps1"
 
Wird ausgeführt, keine Fehlermeldung. Aber passiert nichts, also Programm das beendet werden soll läuft weiter.
Das auf dem Bild ist jetzt ein anderen script was fast dasselbe tut wie das eigentliche Script. Die Programme die mit dem MainScript geschlossen werden habe ich ja nicht lokal.
Ergänzung ()

Oder war mit "Set-ExecutionPolicy Unrestricted" auf dem Server gemeint? Weil auf dem Server läuft es noch über RemoteSigned
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    7,1 KB · Aufrufe: 428
Zuletzt bearbeitet:
Ja auf dem Server, da wo du es eben ausführst. RemoteSigned reicht aus, Unrestricted würde ich lassen.

Wenn es ausgeführt wird, aber nichts macht, dann lass dir irgendwo was ausgeben, damit du siehst was er wo macht.
 
Das läuft über das RMM. Ich lege einen Komponenten an und füge dort mein Script hinzu. Anschließend erstelle ich einen Job (Ein job ist, ein Auftrag der regelmäßig z.B. einmal am tag läuft). Und der führt das dann automatisch über Remote durch.
Ergänzung ()

@Yuuri ich probiere es mal, bis gleich
 
Frage : Die ganze Geschichte könnte man auch über Batch lösen, oder?
Code:
@echo off

REM Prozess1 killen
taskkill /FI "IMAGENAME eq notepad.exe"

REM Prozess2 killen
taskkill /FI "IMAGENAME eq calc.exe"

REM 15 Sekunden warten
rem ping 127.0.0.1 -n 15

REM Neuen Task starten
start "" "C:\DATEV\PROGRAMM\SWS\LiMaService.exe"
 
Da passiert einfach nichts. ich habe jetzt "Read-Host -Prompt “Press Enter to exit”" probiert, aber null nichts. Ist den eine ps1 gleichzeitig eine Datei die es auch ausführt?
Ergänzung ()

@ryan_blackdrago Ich würde es gern mit Powershell machen, weißt du nicht woran es liegt?
 
Jain. PS1 werden explizit über powershell.exe aufgerufen, nicht wie eine übliche Anwendung. Es wäre also ratsam wie @Rego schrieb es über
Code:
powershell.exe -File "pfad\zur\datei.ps1"
zu machen, allerdings über File statt Command.
 
Folgende Fehlermeldung kommt:
PS C:\WINDOWS\system32> File C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1
File : Die Benennung "File" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die
Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:2
+ File C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps ...
+ ~~~~
+ CategoryInfo : ObjectNotFound: (File:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Ergänzung ()

Snap von der Fehlermeldung
 

Anhänge

  • Unbenannt1.PNG
    Unbenannt1.PNG
    14 KB · Aufrufe: 387
es wird über "-command" gemacht

kann es sein, dass Du den Aufruf NICHT in einer Zeile schreibst? Das musst Du direkt so angeben:
PowerShell:
powershell.exe -Command "pfad\zur\datei.ps1"
 
Du hast aber schon gesehen dass vor "File" ein Bindestrich muss? Genau den fehlenden Bindestrich meckert die Powershell auch an.
 
Ok, nochmal komplett:

Wenn du aus der Konsole oder einer Batch-Datei ein PowerShell Script ausführen willst:
Code:
powershell.exe -File "C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1"
Wenn du aus der PowerShell aus ein Script starten willst:
Code:
. "C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1"
// oder
& "C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1"



Rego schrieb:
es wird über "-command" gemacht
Code:
-File
    Führt das angegebene Skript im lokalen Bereich aus (Eingabe eines Punkts vor dem Befehl), sodass die
    vom Skript erstellten Funktionen und Variablen in der aktuellen Sitzung
    verfügbar sind. Geben Sie den Skriptdateipfad und mögliche Parameter ein.
    File muss der letzte Parameter im Befehl sein, da alle Zeichen,
    die nach dem File-Parameternamen eingegeben werden, als Skriptdateipfad
    gefolgt von den Skriptparametern interpretiert werden.

-Command
    Führt die angegebenen Befehle (und alle Parameter) so aus, als wären sie an der
    Windows PowerShell-Eingabeaufforderung eingegeben worden, und wird dann beendet, sofern nicht
    NoExit angegeben wurde. Der Wert von Command kann "-", eine Zeichenfolge oder ein
    Skriptblock sein.
Mit -File führst du eine komplette Datei aus. Über -Command würde es so aussehen:
Code:
powershell.exe -Command "& 'C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1'"
 
@areiland hab ich auch schon, siehe Anhang.
Ergänzung ()

@Yuuri WOW danke.
. "C:\Users\uenek\Documents\Scripts\test_TeamViewer_startScript.ps1" muss jetzt oben in meinem Script stehen oder? Damit es klappt?
Ergänzung ()

Ich will ja nun meine Script NICHT Lokal ausführen. Also ich habe einen Server wo ein eine .exe drauf läuft die gestopt und gestartet werden muss. Und das ohne das Script auf dem Server zu speichern, also kein Pfad angeben.
Ergänzung ()

PowerShell:
Stop-Process -name "Service"
Stop-Process -name "Server"
Start-Sleep -s 15
Start-Process -FilePath "C:\DATEV\PROGRAMM\Sws\Server.exe"

So sieht ja mein Code aus. Wie muss der Code aussehen damit ich ihn in einem Programm speichern kann der jeden Tag einmal ausführt. Also das Programm, wo ich es rein speichere führt es jeden Tag aus.
 
Zuletzt bearbeitet:
Ohne das Script auf dem Server zu speichern ist natürlich blöd... Da kannst du dann auch -Command als Parameter nutzen.

Code:
powershell.exe -Command "Stop-Process -name 'Service'; Stop-Process -name 'Server'; Start-Sleep -s 15; Start-Process -FilePath 'C:\DATEV\PROGRAMM\Sws\Server.exe'"

Alternativ kannst du auch über die WMI Prozesse Remote killen und starten.
 
Sagen wir ich speichere es auf dem Server, wie schaffe ich es dann dan das Skript regelmäßi, z.B. jeden Abend um 24 Uhr läuft?
 
Zurück
Oben