halington
Goto Top

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}"
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

Content-Key: 371282

Url: https://administrator.de/contentid/371282

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: AndreasHoster
AndreasHoster 16.04.2018 um 16:20:11 Uhr
Goto Top
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.
Mitglied: 135950
Lösung 135950 16.04.2018, aktualisiert am 18.04.2018 um 07:49:17 Uhr
Goto Top
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:
@echo off
Powershell -NoExit -Executionpolicy ByPass -noprofile -Command "&'%~dp0\pstest.ps1'"  
Gruß m.
Mitglied: halington
halington 18.04.2018 um 00:59:11 Uhr
Goto Top
Hallo ihr beiden,

vielen Dank für eure Antworten.
Ich habe das jetzt fast fertig.

PowerShell -NoProfile -Command Set-ExecutionPolicy -ExecutionPolicy Bypass -Force -ErrorAction SilentlyContinue -Scope Process; PowerShell -Command "&'%~dp0\pstest.ps1' -Verb runAs"  

Leider funktioniert das noch nicht.

PS C:\Users\Danny\Desktop\pstest> C:\Users\Danny\Desktop\pstest\location.ps1
Die Datei "C:\Users\Danny\Desktop\pstest\location.ps1" kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere   
Informationen finden Sie unter "about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).  
    + CategoryInfo          : Sicherheitsfehler: (:) , ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

Also es soll temporär die Ausführung von Scripten erlaubt und dann das Script pstest.ps1 aufgerufen werden. Normalerweise trennt man doch PowerShell-Befehle mit einem Semikolon, oder? Könnt ihr mir vielleicht sagen weshalb das so nicht geht?
Mitglied: 135950
135950 18.04.2018 aktualisiert um 07:51:40 Uhr
Goto Top
Du brauchst die Executionpolicy vorher nicht setzen! Dazu genügt es sie mit -Executionpolicy ByPass direkt zu umgehen, siehe mein Code oben.
Mitglied: halington
halington 18.04.2018 um 11:41:11 Uhr
Goto Top
Hi marathon,

das ist ja das Problem. Wenn ich deinen Code ausführe erhalte ich exakt die selbe Fehlermeldung.
Mitglied: 135950
135950 18.04.2018 aktualisiert um 11:52:26 Uhr
Goto Top
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.

Und sicher klappt das!

Guckst du hier bei einer "Restricted" Shell einmal "ohne" Bypass und einmal "mit"

screenshot
Mitglied: halington
halington 18.04.2018 um 11:59:25 Uhr
Goto Top
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.
Mitglied: 135950
135950 18.04.2018 aktualisiert um 12:01:23 Uhr
Goto Top
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 face-smile.
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" face-smile.

Dann noch das grüne Schildchen dran gepackt und feeedich.