PowerShell-Script per Batch aufrufen
Hallo zusammen,
ich versuche ein PowerShell-Script (pstest.ps1) per Batch aufzurufen.
Im ersten Schritt versuche ich den String, der später in die Batch kommt, direkt aus PS aufzurufen.
Das funktioniert auch. Trotzdem erscheint eine Fehlermeldung. Kann mir jemand sagen wieso?
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-Command &{$Verzeichnis=Get-Location}; &{. $Verzeichnis\pstest.ps1}"
Damit es später egal ist wo ich den Ordner mit den Scripten liegen habe nutze ich Get-Location.
Grüße
Halington
ich versuche ein PowerShell-Script (pstest.ps1) per Batch aufzurufen.
Im ersten Schritt versuche ich den String, der später in die Batch kommt, direkt aus PS aufzurufen.
Das funktioniert auch. Trotzdem erscheint eine Fehlermeldung. Kann mir jemand sagen wieso?
Start-Process powershell -ArgumentList "-noexit", "-noprofile", "-Command &{$Verzeichnis=Get-Location}; &{. $Verzeichnis\pstest.ps1}"
Ausgabe in der neuen PS:
C:\Users\Danny\Desktop\pstest=Get-Location : Die Benennung "C:\Users\Danny\Desktop\pstest=Get-Location" 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:3
+ &{C:\Users\Danny\Desktop\pstest=Get-Location}; &{. C:\Users\Danny\D ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\Danny...st=Get-Location:String) , CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Hallo dies ist ein pstest
Drücken Sie die Eingabetaste, um den Vorgang fortzusetzen...:
Damit es später egal ist wo ich den Ordner mit den Scripten liegen habe nutze ich Get-Location.
Grüße
Halington
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 371282
Url: https://administrator.de/contentid/371282
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
8 Kommentare
Neuester Kommentar
Weil Variablen in Strings mit " aufgelöst werden.
Sagt auch die Fehlermeldung:
Die Benennung "C:\Users\Danny\Desktop\pstest=Get-Location" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
$Verzeichnis hat den Wert C:\Users\Danny\Desktop\pstest, damit wird
"-Command &{$Verzeichnis=Get-Location}; &{. $Verzeichnis\pstest.ps1}"
in
"-Command &{C:\Users\Danny\Desktop\pstest=Get-Location}; &{. C:\Users\Danny\Desktop\pstest\pstest.ps1}"
aufgelöst.
Einfache Hochkommas ' verwenden.
Sagt auch die Fehlermeldung:
Die Benennung "C:\Users\Danny\Desktop\pstest=Get-Location" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
$Verzeichnis hat den Wert C:\Users\Danny\Desktop\pstest, damit wird
"-Command &{$Verzeichnis=Get-Location}; &{. $Verzeichnis\pstest.ps1}"
in
"-Command &{C:\Users\Danny\Desktop\pstest=Get-Location}; &{. C:\Users\Danny\Desktop\pstest\pstest.ps1}"
aufgelöst.
Einfache Hochkommas ' verwenden.
Moin.
Erstens rufst du eine Variablenzuweisung mit einem Scriptblock auf, das geht so schon mal nicht, zweitens ist das vollkommen überflüssig.
So sieht dann deine Batch aus:
Gruß m.
Erstens rufst du eine Variablenzuweisung mit einem Scriptblock auf, das geht so schon mal nicht, zweitens ist das vollkommen überflüssig.
So sieht dann deine Batch aus:
@echo off
Powershell -NoExit -Executionpolicy ByPass -noprofile -Command "&'%~dp0\pstest.ps1'"
Du brauchst die Executionpolicy vorher nicht setzen! Dazu genügt es sie mit -Executionpolicy ByPass direkt zu umgehen, siehe mein Code oben.
Zitat von @halington:
Hi marathon,
das ist ja das Problem. Wenn ich deinen Code ausführe erhalte ich exakt die selbe Fehlermeldung.
Dann führst du die Powershell nicht als Administrator aus, das ist ja sowieso Voraussetzung wenn du das Runas-Verb nutzen willst.Hi marathon,
das ist ja das Problem. Wenn ich deinen Code ausführe erhalte ich exakt die selbe Fehlermeldung.
Und sicher klappt das!
Guckst du hier bei einer "Restricted" Shell einmal "ohne" Bypass und einmal "mit"
Zitat von @halington:
Nein, ich hab schlauerweise den Code in der ISE von einer .ps1 ausgeführt was ja in dem Fall logischerweise nicht funktionieren kann......
Jaa das war gaaanz schlau .Nein, ich hab schlauerweise den Code in der ISE von einer .ps1 ausgeführt was ja in dem Fall logischerweise nicht funktionieren kann......
Ich hab den Code jetzt in meine eigentliche Batch gepackt und ausgeführt. Läuft. Vielen Dank für die Hilfe.
Naja das war ja eigentlich auch deine Intention im Titel: "PowerShell-Script per Batch aufrufen" .Dann noch das grüne Schildchen dran gepackt und feeedich.