Hogyan ellenőrizhetem a rendszergazdai jogosultságokat a PowerShell szkriptben?

Ha a PowerShell-parancsfájl futtatásához rendszergazdai jogosultságokkal kell futtatnia, akkor közvetlenül a PS-kódban ellenőrizheti az aktuális folyamatot a rendszergazdai jogosultságokhoz.

A következő PowerShell-kód használható annak ellenőrzésére, hogy az aktuális szkript „Futtatás rendszergazdaként” módban fut-e vagy sem:

Write-Host "Rendszergazdai jogok ellenőrzése ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] "Administrator"))
Figyelmeztetés: "Nem elegendő engedély a szkript futtatásához. Nyissa meg a PowerShell konzolt rendszergazdai jogosultságokkal, és futtassa újra a szkriptet"
szünet

egyéb
Írás-fogadó "Vannak rendszergazdai jogok - folytassa a szkriptet ..." -ForegroundColor Green

Mentse a PowerShell kódot a check_perms.ps1 fájlba, és futtassa a konzolban rendszergazdai jogok nélkül:

C: \ PS \ check_perms.ps1

Mint láthatja, egy felirat tűnt fel, hogy nincsenek rendszergazdai jogok, így a PowerShell szkript nem működött.

Futtassa ezt a szkriptet egy megnövelt PowerShell-munkamenetben. Mint láthatja, a szkript megállapította, hogy ez a PowerShell munkamenet rendszergazdai jogosultságokkal fut.

A PowerShell parancsfájlokat rendszergazdai jogosultságokkal futtathatja közvetlenül a Windows Intézőből.

Ezenkívül közvetlenül a PowerShell parancsfájlból is kérhet jogosultságnövelést, ehhez a sor helyett:

Figyelmeztetés “Nincs elég jog”

Használjon kódot

Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs

Ha a szkriptet rendszergazdai jogosultságok nélkül futtatja, ez a szkript új privilegizált PowerShell-munkamenetben indul újra, és megjelenik egy UAC kérés a jogosultságok emelésére..

Ha engedélyezi a privilégiumok eszkalációját, akkor a PS1 szkriptet rendszergazdai jogokkal kell futtatni (az aktuális PowerShell szkriptfájl elérési útja átkerül a $ PSCommandPath környezeti változón).

A PowerShell 4.0 és újabb verzióiban még könnyebb ellenőrizni a rendszergazdai jogokat. Ehhez használja az irányelvet -RunAsAdministrator.

#reversiveversion 4.0
#requires -RunAsAdministrator
Write-Host "PowerShell rendszergazdaként indult" -ForegroundColor Green

Ha a szkript nem az adminisztrátor alatt fut, hiba jelenik meg:

A 'check_perms.ps1' szkript nem futtatható, mert tartalmaz egy "#requires" utasítást az adminisztrátorként való futtatáshoz. A jelenlegi Windows PowerShell munkamenet nem fut rendszergazdaként. Indítsa el a Windows PowerShell szoftvert a Futtatás rendszergazdaként lehetőséggel, majd próbálja újra futtatni a szkriptet.
Sorban: 1 karakter: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ Kategóriainformáció: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation

Ha ezt a szkriptet a PowerShell v2-es számítógépen futtatja, egy hiba jelenik meg:

A "#requires" nyilatkozatot nem lehet feldolgozni a 2. sorban, mert nem a megfelelő formátumban van.
A "#requires" utasításnak a következő formátumok egyikének kell lennie:
"#Requires -shellid"
"#Requires -version"
"#Requires -pssnapin [-version]"

Az Active Directory kezeléséhez szüksége lehet egy másik feladatra: a PowerShell parancsfájlból meg kell győződnie arról, hogy az aktuális felhasználó rendelkezik-e tartományi rendszergazdai jogokkal. Használja a következő kódot:

If (([[Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ("Domain Admins"))

# A szkriptet elindító felhasználó rendelkezik Domain Admins jogokkal

más

# nincs jog Domain Rendszergazdák