Seite 1 von 1
Powershell in Batchdatei ausführen
Verfasst: 14.08.2025, 20:13
von John22
Ich habe in Windows 11 jetzt Powershell 7.5 installiert und möchte in einer Batchdatei pwsh.de für 7.5 ausführen und eine PS1-Datei als Parameter mitgeben die ausgeführt wird und nach deren Ende das Fenster nicht geschlossen wird. Ich habe viele Jahre nicht mehr mit Powershell gearbeitet.
Re: Powershell in Batchdatei ausführen
Verfasst: 14.08.2025, 20:28
von DK2000
Code: Alles auswählen
@echo off
cd /d %~dp0
pwsh.exe -NoExit -NoLogo -NoProfile -ExecutionPolicy Bypass -Command "& '%~dp0PowerShellkSkript.ps1'"
echo.
pause
Das wäre so mein Grundgerüst für solche Zwecke. .cmd und .ps1 befinden sich dabei im selben Verzeichnis.
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 15:04
von John22
Vielen Dank für den Code. Ich habe gestern Abend damit einiges versucht. Aber nicht so hinbekommen damit es klappt. Ich habe PS1-Dateien jetzt mit Powershell 7 für "immer" verknüpft und damit laufen die einzigen zwei Skripte die ich habe wieder. Das habe ich mit dieser Anleitung hinbekommen:
https://www.heise.de/tipps-tricks/Windo ... &hgf=false
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 17:15
von Holgi
bei 2 Scripten ist das sicherlich ok.
Bei sehr vielen PS-Scripten und wenn man grds. die Execution-Policy nicht von Restricted auf etwas anderes ändern möchte, bietet sich noch diese Methode an:
dein Powershell Script, nennen wir es mal John22.ps1 und dieses kleine Batch Datei zusammen in einem Ordner ablegen. Wichtig dabei: dem cmd-Script den gleichen Namen geben, wie dem PS-Script:
John22.cmd
Code: Alles auswählen
@ECHO OFF
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
dann einfach durch Doppelklick auf John22.cmd das Powershell Script starten.
Vorteil: der Inhalt des cmd-Scripts muss nicht geändert werden; Nachteil (wenn´s denn einer ist: der Name muss angepasst werden)
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 17:30
von DK2000
Gut, würde auch gehen, aber zwei Instanzen von PowerShell muss man da auch nicht unbedingt starten.
Aber beide Versionen sollten funktionieren. Keine Ahnung, was da bei John22 nicht geklappt hat, kann ich nicht sagen. Hätte man wissen müssen, das da nicht klappt. Eventuell böse Leerzeichen im Pfad. Oder irgendetwas anderes.
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 17:32
von Holgi
wäre schön, wenn @John22 es zumindest mal probieren würde. Bei mir funzt das so seit Jahren.
Das mit den zwei Instanzen von PowerShell habe ich jetzt nicht verstanden. Bei mir läuft einfach das PS-Script ab mit erhöhten Rechten.
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 17:56
von DK2000
Ach so, ja, am Ende das RunAs überlesen. Du startest eine Instanz von der PowerShell und in dieser startest Du eine zweite Instanz vom PowerShell mit Adminrechten. In dem Falle geht das nicht anders. Aber theoretisch müsste da auch mit einer Instanz gehen. Ne, geht nicht. Müsste man mit sudo arbeiten.
Re: Powershell in Batchdatei ausführen
Verfasst: 15.08.2025, 23:37
von g-force
Ich arbeite mittlerweile viel mit Powershell in einer Unattend-Installationsumgebung innerhalb MDT und 300 Clients/Tag. Der grundlegende Aufruf des (steuenden) PS-Scripts erfolgt aber tatsächlich immernoch über CMD:
Code: Alles auswählen
:: PowerShell-Skript ausführen
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "\\server\netdrive$\Scripts\SteuerungsScript.ps1" -WindowStyle Maximized
Da die Clients (Win10/11) bis Powershell 5.1 kompatibel sind, funktioniert das.
Was ich nicht weiß: Kann man gezielt eine bestimmte PS-Version aufrufen?
Re: Powershell in Batchdatei ausführen
Verfasst: 16.08.2025, 00:05
von DK2000
Wüsste nicht, dass da noch was geht. Gibt ja nur noch die 5.1 und die 7.x. Und der Schalter "-version" hat da keine richtige Bedeutung mehr. Solange nicht die 2.0 installiert ist, geht "-version 2.0". Aber das ist ja dann auch Geschichte. Gibt dann halt nur noch das:
https://learn.microsoft.com/en-us/power ... rshell-7.5
Aber damit verhindert man höchstens, dass ein Skript für die 5.1 in der 7.x ausgeführt wird. Umgekehrt geht es aber nicht.
Und ja, gibt da mehrere Möglichkeiten, PowerShell Skripte übe eine Batch zu starten. Muss man ausprobieren, welche Methode am besten zu seien Szenario passt. Verwende ja auch gerne gsudo, um ein Skript über einen Batch mit Adminrechten zu starten. Windows bringt zwar jetzt wohl sein eigenes sudo mit. Aber das habe ich da noch nicht weiter getestet.
Re: Powershell in Batchdatei ausführen
Verfasst: 16.08.2025, 02:54
von g-force
Letztendlich geht es ja nur darum, daß die Ausführung von PS-Scripten unter Windows "ab Werk" gesperrt ist, es kommt mindestens eine Abfrage zur Ausführung, eher eine Sperre. Man kann das "global" über Richtlinien erlauben oder im Einzelfall über eine CMD (mit Parametern) erlauben/erzwingen.
Einige meiner (mithilfe ChatGPT) erstellten PS-Scripte funktionierten unter einem Standard-Windows nicht, da PS 7 nicht vorhanden war. Da sollte man dann drauf achten. PS 5.1 geht auf Win10/11 immer.
Re: Powershell in Batchdatei ausführen
Verfasst: 16.08.2025, 19:15
von John22
Holgi hat geschrieben: 15.08.2025, 17:15
bei 2 Scripten ist das sicherlich ok.
Bei sehr vielen PS-Scripten und wenn man grds. die Execution-Policy nicht von Restricted auf etwas anderes ändern möchte, bietet sich noch diese Methode an:
dein Powershell Script, nennen wir es mal John22.ps1 und dieses kleine Batch Datei zusammen in einem Ordner ablegen. Wichtig dabei: dem cmd-Script den gleichen Namen geben, wie dem PS-Script:
John22.cmd
Code: Alles auswählen
@ECHO OFF
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
dann einfach durch Doppelklick auf John22.cmd das Powershell Script starten.
Vorteil: der Inhalt des cmd-Scripts muss nicht geändert werden; Nachteil (wenn´s denn einer ist: der Name muss angepasst werden)
Es hat geklappt. Aber es wird Powershell 1 benutzt. Powershell 2 ist in den Windows Features deaktiviert. Ich habe mir aber vorgenommen Powershell 7.5 zu benutzen. So habe ich in der CMD-Datei zweimal "powershell.exe" durch "pwsh.exe" ersetzt.
Re: Powershell in Batchdatei ausführen
Verfasst: 16.08.2025, 20:41
von Holgi
super! Danke für die Rückmeldung!
Also dann:
Code: Alles auswählen
@ECHO OFF
pwsh.exe -NoProfile -Command "& {Start-Process pwsh.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}"
Re: Powershell in Batchdatei ausführen
Verfasst: 16.08.2025, 21:54
von DK2000
John22 hat geschrieben: 16.08.2025, 19:15
Es hat geklappt. Aber es wird Powershell 1 benutzt.
Nein. Das ist PowerShell 5.1. Microsoft hat nie das v1.0 im Pfad oder die 1 in .ps1 geändert. PowerShell 7.5 bringt auch nur eine Handvoll eigener Module mit sich, Die meisten Module werden auch aus dem v1.0 Verzeichnis verwendet. Und nicht vergessen, dass die 7.5 nicht in jeder Hinsicht abwärtskompatibel zur 5.1 ist. Einige cmdlets fehlen ganz oder wurden durch andere cmdlets ersetzt, so dass nicht jedes Skript wie erwartet in der 7.5 läuft. Das meiste wird gehen, aber eignes halt nicht.