Rileva se PowerShell è in esecuzione come amministratore


Risposte:


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

Rompendo ciò che fa:

  • [bool]- Trasmetti il ​​risultato finale a bool.
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- Recupera il WindowsIdentityper l'utente attualmente in esecuzione.
  • (...).groups- Accedi alla groupsproprietà dell'identità per scoprire a quali gruppi di utenti fa parte l'identità.
  • -match "S-1-5-32-544"controlla se groupscontiene il SID ben noto del gruppo Administrators, l'identità lo contiene solo se è stato utilizzato "Esegui come amministratore".

2
Invece di pubblicare solo una riga di codice, puoi spiegare cosa fa? Questo aiuta i futuri visitatori a comprenderlo e adattarlo, se necessario.
slhck,

BOOO. Dai a quest'uomo più voti
Kolob Canyon,

4
Preferisco la risposta di @Bill_Stewart di seguito poiché è priva di stringhe magiche.
8DH

Invece di usare -matche [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
scrivere a macchina

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

In questo modo viene recuperata l'identità di Windows corrente e viene restituito True se l'identità corrente ha il ruolo di amministratore (ovvero è in esecuzione elevata).


13
Mentre la risposta accettata è corretta, questa risposta è molto più chiara, specialmente per qualcuno che potrebbe leggere la tua sceneggiatura tra sei mesi.
Patrick Seymour,

46

In Powershell 4.0 è possibile utilizzare i requisiti nella parte superiore dello script:

#Requires -RunAsAdministrator

Uscite:

Lo script "MyScript.ps1" non può essere eseguito perché contiene un'istruzione "#requires" per l'esecuzione come amministratore. L'attuale sessione di Windows PowerShell non è in esecuzione come amministratore. Avviare Windows PowerShell utilizzando l'opzione Esegui come amministratore, quindi riprovare a eseguire lo script.


cosa succede se si desidera una funzione che esce se non eseguita dall'amministratore?
Kolob Canyon,

1
@KolobCanyon: non è possibile eseguire solo una funzione PowerShell elevata; l'intero processo di PowerShell è elevato o meno.
Bill_Stewart,

@Bill_Stewart sì, ma puoi farlo returnse l'utente non è admin :)
Kolob Canyon

1
@KolobCanyon: puoi solo elevare il processo di PowerShell ; non è possibile elevare una singola funzione . Ecco perché #Requires -RunAsAdministratorè utile: impedisce l' esecuzione dell'intero script se non sei elevato.
Bill_Stewart,

@Bill_Stewart Sì, dovrò usarlo ad un certo punto.
Kolob Canyon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.