Ermitteln Sie, ob PowerShell als Administrator ausgeführt wird


Antworten:


42
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

Aufteilen, was dies bewirkt:

  • [bool]- Wirf das Endergebnis auf a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- Ruft das WindowsIdentityfür den aktuell ausgeführten Benutzer ab.
  • (...).groups- Rufen Sie die groupsEigenschaft der Identität auf, um herauszufinden, zu welchen Benutzergruppen die Identität gehört.
  • -match "S-1-5-32-544"Überprüft, ob groupsdie bekannte SID der Administratorgruppe enthalten ist. Die Identität enthält sie nur, wenn "Als Administrator ausführen" verwendet wurde.

1
Kannst du bitte erklären, was es bewirkt, anstatt nur eine Codezeile zu posten? Dies hilft zukünftigen Besuchern, diese zu verstehen und gegebenenfalls anzupassen.
Slhck

BOOO. Geben Sie diesem Mann mehr Upvotes
Kolob Canyon

4
Ich bevorzuge die Antwort von @Bill_Stewart unten, da es frei von Zaubersprüchen ist.
8.

Anstatt zu verwenden -matchund zu [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
tippen

57
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

Dadurch wird die aktuelle Windows-Identität abgerufen und True zurückgegeben, wenn die aktuelle Identität die Administratorrolle hat (dh mit erhöhten Rechten ausgeführt wird).


13
Während die akzeptierte Antwort korrekt ist, ist diese Antwort viel klarer, insbesondere für jemanden, der Ihr Skript in sechs Monaten lesen kann.
Patrick Seymour

46

In Powershell 4.0 können Sie verwenden , erfordert am Anfang des Skripts:

#Requires -RunAsAdministrator

Ausgänge:

Das Skript 'MyScript.ps1' kann nicht ausgeführt werden, da es die Anweisung "#requires" enthält, um als Administrator ausgeführt zu werden. Die aktuelle Windows PowerShell-Sitzung wird nicht als Administrator ausgeführt. Starten Sie Windows PowerShell mit der Option Als Administrator ausführen, und führen Sie das Skript erneut aus.


Was ist, wenn Sie eine Funktion möchten, die beendet wird, wenn sie nicht vom Administrator ausgeführt wird?
Kolob Canyon

1
@KolobCanyon - Es gibt keine Möglichkeit, nur eine PowerShell-Funktion mit erhöhten Rechten auszuführen . Der gesamte PowerShell-Prozess ist entweder erhöht oder nicht.
Bill_Stewart

@ Bill_Stewart ja, aber Sie können, returnwenn der Benutzer nicht admin ist :)
Kolob Canyon

1
@KolobCanyon - Sie können nur den PowerShell- Prozess erhöhen . Sie können keine einzelne Funktion erhöhen . Deshalb #Requires -RunAsAdministratorist das nützlich: Es verhindert, dass das gesamte Skript ausgeführt wird, wenn Sie nicht über einen erhöhten Status verfügen.
Bill_Stewart

@ Bill_Stewart Ja, ich werde das irgendwann benutzen müssen.
Kolob Canyon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.