michi.wtr
Goto Top

PowerShell Script: Einzelnen Befehl als Admin ausführen

Hi zusammen,

gibt es eine Möglichkeit, einen einzelnen Command in einem PowerShell Script als Admin auszuführen?
Ich habe bereits eine Möglichkeit gefunden das ganze Skript auf Adminrechte anzuheben indem ich auf diese am Anfang prüfe und ggf. einen neuen Host mit Adminrechten starte und ihm mein Skript übergebe.

Allerdings müsste es doch bestimmt eine Möglichkeit geben, einen einzelnen Command auch als Admin auszuführen. Ich habe bereits von jemandem erfahren dies solle mit Invoke-Command möglich sein, da dieser Befehl wohl die höchstmöglichen Rechte von dem User einnimmt, mit dem man diesen startet.
So zumindest die Theorie, allerdings vermute ich, dass dies wohl nicht ganz stimmt, denn sonst würde es auch keinen Parameter -RunAsAdmin im Cmdlet Invoke-Command geben, oder?

Invoke-Command -ScriptBlock {Stop-Service -Name w32Time -Force}

Dieser Befehl führt lediglich zu einem Error: Der Dienst [...] kann nicht auf dem Computer . geöffnet werden.
Starte ich denselben jedoch auf einem Host mit Adminrechten, so funktioniert alles einwandfrei...

Invoke-Command -ScriptBlock {Stop-Service -Name w32Time -Force} -RunAsAdmin

Dieser Befehl fordert mich auf, den Parameter -ContainerId mit anzugeben, von dem ich aber leider keine Ahnung habe und aus dem Helpfile nur hervorgeht: Specifies an array of container IDs. Im Netz habe ich dazu nicht wirklich etwas gefunden und habe es auch nicht wirklich weiter verfolgt, da ich nachgelesen hatte, dies hätte etwas mit Remote Ausführung auf einem Server zu tun.

Content-Key: 4862253225

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

Printed on: April 24, 2024 at 07:04 o'clock

Mitglied: 4863114660
Solution 4863114660 Dec 05, 2022 updated at 09:47:31 (UTC)
Goto Top
Moin.
Start-Process erledigt das für dich mit dem Parameter "-verb runas" wenn der User selbst schon Admin ist:
start-process powershell -ArgumentList '-EP Bypass',"-C `"Stop-Service -Name w32Time -Force`"" -verb runas  
bzw. wenn der User der aktuellen Instanz selbst kein Admin ist dann halt verschachtelt mit Credential-Angabe aufgerufen
start-process powershell -ArgumentList '-EP Bypass',"-C `"start-process powershell -verb runas -Argumentlist '-C Stop-Service -Name w32Time -Force'`"" -Credential (Get-Credential)  
Gruß S.
Member: TK1987
Solution TK1987 Dec 05, 2022 updated at 09:41:52 (UTC)
Goto Top
Moin,

wenn die Konsole nicht schon als Admin gestartet wurde, benötigst du immer eine neue Instanz.
Start -Verb RunAs powershell -ArgumentList "stop-service -Name w32Time -force"  

um die Ausführung in der aktuellen Instanz zu prüfen, benötigst du zusätzlich den PassThru-Parameter, z.B. so:
$Process = Start -PassThru -Verb RunAs powershell -ArgumentList "stop-service -Name w32Time -force"  
$Process.WaitForExit()
if ($Process.ExitCode) {write-host -f red "Fehler"} else {write-host -f green "w32Time wurde erfolgreich beendet. "  

Gruß Thomas
Mitglied: 3063370895
3063370895 Dec 05, 2022 updated at 09:42:37 (UTC)
Goto Top
Moin,

-RunAsAdministrator wird in Verbindung mit -ContainerID für Windows Server Container verwendet.

Wie schlepper schreibt, kannst du mit Start-Process einen Teil deines Skriptes als Admin ausführen.
Member: michi.wtr
michi.wtr Dec 05, 2022 at 09:56:19 (UTC)
Goto Top
Super vielen Dank face-smile ja dann hatte ich nen Denkfehler, das mit start-process hatte ich auch schon gemacht, dachte nur ich könnte eventuell die Rechte desselben Hosts anheben.
Member: TK1987
TK1987 Dec 05, 2022 at 10:22:24 (UTC)
Goto Top
Zitat von @michi.wtr:
... dachte nur ich könnte eventuell die Rechte desselben Hosts anheben.
Zum Glück ist dem nicht so. Sonst könnte ja jeder Schadcode, der nur mit eingeschränkten Rechten gestartet wurde, automatisch immer die höchsten Rechte des Users annehmen.

Gruß Thomas