Psst, es gibt eine viel bessere Lösung. Damit habe ich voll im Griff, was ich starten lassen will. Die beschriebene Policy hat den grossen Nachteil, dass sie auf Angaben innerhalb der ps1-Datei abstützt, in welcher die Herkunft (Internet/lokal) vermerkt ist. Diese
ADS kann allerdings falsch sein, weil die Datei sie durch Umkopieren verlieren kann.
Die folgende Zeile kann in eine Datei meinstart.cmd eingetragen werden:
Code:
cmd.exe /c powershell.exe -executionpolicy bypass -file "%~dp0\meinskript.ps1"
Danach kann sie also per
meinstart.cmd von der Kommandozeile oder als Desktop-Verknüpfung gestartet werden. Es wird damit also eine weitere Shell geöffnet (cmd.exe, vielleicht ginge es gar ohne), danach per /c der Rest der Zeile als Kommando abgesetzt. /c sorgt dafür, dass nach Beendung direkt in die CMD-Datei (also meinstart.cmd) zurückgewechselt wird.
Nun wird also powershell.exe mit der Option
-executionpolicy bypass gestartet. Dies bewirkt genau, was im Artikel mit Set-ExecutionPolicy auch gemacht wird - nur eben genau für dieses eine Mal. Danach wird die eigentliche Powershell-Skriptdatei mit der Option
-file hinterhergereicht.
Dass ich die Datei mit "%dp0\ ... " verpackt habe bewirkt zum Einen, dass Pfade mit Leerzeichen in Windows sauber verarbeitet werden. %dp0 macht zusätzlich sicher, dass Windows die Datei im gleichen Ordner sucht, in dem die CMD-Datei liegt. Danach spielt es nämlich keine Rolle, von wo her die CMD gestartet wird.
Eine Quelle für diesen Beitrag kann ich nicht nennen. Das habe ich mir selber so ausgedacht. Was ich aber sagen kann ist, dass PCTipp diesen Trick gerne hier auf der Website oder in den eigenen Publikationen verwenden und meine Texte unentgeldlich übernehmen darf.