Kako provjeriti administratorske povlastice u PowerShell skripti?

Ako ga trebate pokrenuti s povlasticama administratora za pokretanje skripte PowerShell, možete provjeriti trenutni postupak za administrativne povlastice izravno u PS kodu.

Sljedeći PowerShell kôd može se koristiti za provjeru radi li se trenutna skripta u načinu rada "Pokreni kao administrator" ili ne:

Host pisanja "Provjera administrativnih prava ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] "Administrator"))
Upozorenje za pisanje "Nedovoljno dopuštenja za pokretanje ove skripte. Otvorite PowerShell konzolu s povlasticama administratora i ponovo pokrenite skriptu."
pauza

drugo
Host pisanja "Postoje administratorska prava - nastavite skriptu ..." -ForegroundColor Green

Spremite PowerShell kôd u datoteku check_perms.ps1 i pokrenite ga u konzoli bez administrativnih prava:

C: \ PS \ check_perms.ps1

Kao što vidite, pojavio se natpis da nema prava administratora, pa je PowerShell skripta prestala raditi.

Pokrenite ovu skriptu sada u povišenoj sesiji PowerShell-a. Kao što vidite, skripta je utvrdila da se ova PowerShell sesija izvodi s povlasticama administratora.

Skripte programa PowerShell s povlasticama administratora možete pokrenuti izravno iz Windows Explorera.

Možete i zatražiti povećanje povlastica izravno iz PowerShell skripte, za to umjesto retka:

Upozorenje pisanja "Nema dovoljno prava"

Upotrijebite kôd

Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs

Kada pokrenete skriptu bez privilegija administratora, ova se skripta ponovno pokreće u novoj privilegiranoj sesiji PowerShell i pojavit će se UAC zahtjev za povećanje privilegija..

Ako omogućite eskalaciju privilegija, vaša PS1 skripta pokrenut će se s administratorskim pravima (put do trenutne datoteke skripte PowerShell prolazi kroz varijablu okruženja $ PSCommandPath).

U PowerShellu 4.0 i novijim verzijama, još je lakše provjeriti administrativne povlastice. Da biste to učinili, upotrijebite direktivu -RunAsAdministrator.

#requires -verzija 4.0
#requires -RunAsAdministrator
Host pisanja "PowerShell je započeo kao administrator" -ForegroundColor Green

Ako se skripta ne pokrene pod administratorom, pojavit će se pogreška:

Skripta 'check_perms.ps1' ne može se pokrenuti jer sadrži izjavu "#requires" za pokretanje kao Administrator. Trenutačna sesija sustava Windows PowerShell ne radi kao Administrator. Pokrenite Windows PowerShell korištenjem opcije Run as Administrator i pokušajte ponovo pokrenuti skriptu.
Na redu: 1 znak: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation

Ako pokrenete ovu skriptu na računalu sa PowerShell v2, pojavljuje se pogreška:

Izjava "#requires" se ne može obraditi u retku 2 jer nije u ispravnom formatu.
Izjava "#requires" mora biti u jednom od sljedećih formata:
"#Requires -shellid"
"# Zahtijeva -verzija"
"# Zahtijeva -pssnapin [-verzija]"

Za upravljanje Active Directoryom, možda će vam trebati drugi zadatak: iz skripte PowerShell, morate provjeriti ima li trenutni korisnik prava administratora domene. Koristite sljedeći kod:

If (([[Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ("Administrator domena"))

# korisnik koji je pokrenuo skriptu ima prava na domene administratora

drugo

# no rights Administrator domena