Come posso sapere nei miei script se PowerShell è in esecuzione con i privilegi di amministratore?
Devo sapere perché sto cercando di eseguire un programma che richiede la possibilità di aprire porte protette.
Come posso sapere nei miei script se PowerShell è in esecuzione con i privilegi di amministratore?
Devo sapere perché sto cercando di eseguire un programma che richiede la possibilità di aprire porte protette.
Risposte:
[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 WindowsIdentity
per l'utente attualmente in esecuzione.(...).groups
- Accedi alla groups
proprietà dell'identità per scoprire a quali gruppi di utenti fa parte l'identità.-match "S-1-5-32-544"
controlla se groups
contiene il SID ben noto del gruppo Administrators, l'identità lo contiene solo se è stato utilizzato "Esegui come amministratore".-match
e [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([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).
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.
return
se l'utente non è admin :)
#Requires -RunAsAdministrator
è utile: impedisce l' esecuzione dell'intero script se non sei elevato.