Wie kann ich Powershell als Admin AND mit Argumenten aus einer Batchdatei ausführen?

8

Ich habe Antworten für beide Aufgaben getrennt gefunden, aber nicht zusammen:

  • Starten Sie powershell als Administrator aus einer Batchdatei

  • Führen Sie powershell mit Argumenten aus einer Batchdatei

  • aus

Aber ich möchte powershell als Administrator AND mit Argumenten aus einer Batch-Datei ausführen.

Aus diesem Grund bin ich überzeugt, dass dies bisher kein Duplikat ist.

Dieses Problem ist aus diesem Grund kompliziert:

Ich verwende den Schalter ArgumentList , um auf den Dateipfad zu zeigen, wenn eine erhöhte Powershell ausgeführt wird. Ich verwende es auch, um Argumente zu übergeben. Separat konnte ich diesen Schalter mit Erfolg verwenden. Es sieht nicht so aus, als könnte ich es für beide Aufgaben verwenden.

So verwende ich Powershell derzeit:

Als Administrator:

%Vor%

Mit Argumenten:

%Vor%

Was ich versucht habe:

Ich habe versucht, nur meine Argumente zum ArgumentList hinzuzufügen, wo die Datei übergeben wurde, aber sie wurden nicht erkannt.

Ich habe auch versucht, -Verb RunAs zur Arbeitsargumentzeile hinzuzufügen, aber Powershell dachte, dass ich versuchte, ein anderes Argument namens Verb zu übergeben, und konnte die Powershell nicht als und admin ausführen.

Ist es möglich, sowohl das Ausführen von Powershell als Administrator als auch mit Argumenten auszuführen, indem ich die Art und Weise, wie ich Argumente übergebe, oder wie ich die Powershell anhöre, umsetze?

    
Kyle Stoflet 03.11.2016, 20:33
quelle

3 Antworten

4

Es ist möglich, Ihr Problem ohne Tools von Drittanbietern zu lösen, aber die Lösung ist etwas geheimnisvoll.

Daher sollten Sie stattdessen die hilfreichen Tools elevate32 und elevate64 von Bill Stewart herunterladen, wie in seine Antwort , die die Lösung vereinfachen.

Hier ist ein einfaches Beispiel, das das Get-Date Cmdlet mit Argumenten in einer erhöhten PowerShell-Sitzung aufruft, die von cmd.exe (oder einer Batch-Datei) gestartet wurde:

%Vor%

Beachten Sie, dass die Befehlszeile, die an die erhöhte PS-Sitzung übergeben wird, die das intermediate -command -Argument erstellt, als einzelnes -Argument in eingebettet übergeben wird einfache Anführungszeichen .

Das Zitieren kann schwierig werden, aber dieser Ansatz funktioniert auch beim Aufruf von *.ps1 Dateien im Prinzip:

  • powershell -command "start-process -verb runas powershell" ist der invariante Teil der Befehlszeile.

  • Die verbleibende Zeichenfolge "..." -enclosed muss eine verschachtelte einzelne Zeichenfolge mit Zitaten enthalten, die PowerShell erkennt (einfache Anführungszeichen sind am einfachsten), die alle Argumente enthalten würde direkt an einen powershell ... -Befehlszeilenaufruf übergeben.

Auf Ihr Beispiel angewendet:

%Vor%

Hinweis: Achten Sie darauf, den vollständigen Pfad für Ihre Skriptdatei zu verwenden , da die erweiterte PS-Sitzung nicht (unbedingt) ausgeführt wird das gleiche Verzeichnis wie die aufrufende Sitzung.

Wenn Sie die Argumente innerhalb der verschachtelten Zeichenfolge zitieren müssen, verwenden Sie \" :

%Vor%     
mklement0 03.11.2016, 22:22
quelle
4

Sie können dies tun, indem Sie eine kurze Befehlszeilen-ausführbare Datei mit dem Namen Elevate32.exe (oder Elevate64.exe für die 64-Bit-Version) verwenden. Sie können es hier bekommen:

Ссылка (ElevationToolkit1.zip)

Beispiel:

%Vor%

Alles nach -- ist die Befehlszeile, die Sie erhöhen möchten.

    
Bill_Stewart 03.11.2016 21:48
quelle
0

Wenn Sie NirCmd von NirSoft noch, Sie haben einen netten elevate -Befehl zu Ihren Diensten (und eine Unzahl weiterer).

%Vor%

NirCmd ist in beiden x86- und x64-Varianten verfügbar und kostenlos, wie alle Software von NirSoft .

    
cdlvcdlv 06.01.2018 22:17
quelle

Tags und Links