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