Kako preveriti skrbniške pravice v skriptu PowerShell?

Če ga želite zagnati s skrbniškimi pravicami, če želite zagnati skript PowerShell, lahko trenutni postopek preverite v upravnih privilegijih neposredno v kodi PS.

Naslednjo kodo PowerShell lahko uporabite za preverjanje, ali se trenutni skript izvaja v načinu »Zaženi kot skrbnik« ali ne:

Host pisanja "Preverjanje skrbniških pravic ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] "Administrator"))
Opozorilo o pisanju "Premalo dovoljenj za zagon tega skripta. Odprite konzolo PowerShell s skrbniškimi pravicami in zaženite skript znova."
Odmor

drugače
Host piši "Obstajajo skrbniške pravice - nadaljujte skript ..." -ForegroundColor Green

Shranite kodo PowerShell v datoteko check_perms.ps1 in jo zaženite v konzoli brez skrbniških pravic:

C: \ PS \ check_perms.ps1

Kot vidite, se je pojavil napis, da ni skrbniških pravic, zato je skript PowerShell prenehal delovati.

Zaženite ta skript zdaj v povišani seji PowerShell. Kot vidite, je skript določil, da seja PowerShell izvaja s skrbniškimi privilegiji.

Skripte PowerShell s skrbniškimi pravicami lahko zaženete neposredno iz Windows Explorerja.

Za povečanje privilegijev lahko zahtevate tudi neposredno iz skripta PowerShell, in sicer namesto vrstice:

Opozorilo o pisanju „Ni dovolj pravic“

Uporabi kodo

Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs

Ko zaženete skript brez skrbniških privilegijev, se bo ta skript znova zagnal v novi privilegirani seji PowerShell in pojavila se bo UAC zahteva za dvig privilegijev.

Če omogočite stopnjevanje privilegijev, se bo vaš skript PS1 izvajal s skrbniškimi pravicami (pot do trenutne datoteke skripta PowerShell se poda skozi spremenljivko okolja $ PSCommandPath).

V PowerShellu 4.0 in novejših različicah je še lažje preveriti skrbniške pravice. Če želite to narediti, uporabite direktivo -RunAsadministrator.

#requires -verzija 4.0
#requires -RunAsAdministrator
Host pisanja "PowerShell se je začel kot skrbnik" -ForegroundColor Green

Če se skript ne zažene pod skrbnikom, se bo prikazala napaka:

Skripta 'check_perms.ps1' ni mogoče zagnati, ker vsebuje izjavo "#requires" za zagon kot skrbnik. Trenutna seja Windows PowerShell se ne izvaja kot skrbnik. Zaženite Windows PowerShell z možnostjo Zaženi kot skrbnik in poskusite znova zagnati skript.
Na vrsti: 1 znak: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~
+ KategorijaInfo: DovoljenjeDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation

Če ta skript zaženete v računalniku z PowerShell v2, se prikaže napaka:

Stavka "#requires" v drugi vrstici ni mogoče obdelati, ker ni v pravilni obliki.
Izjava "#requires" mora biti v eni od naslednjih formatov:
"#Zahteva -sledno"
"# Zahteva-pretvorba"
"# Zahteva -pssnapin [-version]"

Če želite upravljati Active Directory, boste morda potrebovali drugo nalogo: iz skripta PowerShell morate preveriti, ali ima trenutni uporabnik pravice skrbnika domene. Uporabite naslednjo kodo:

If (([[Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ("Administratorji domene"))

# uporabnik, ki je sprožil skript, ima pravice za skrbnike domene

Ostalo

# brez pravic domene