Jak sprawdzić uprawnienia administratora w skrypcie PowerShell?

Jeśli musisz uruchomić go z uprawnieniami administratora, aby uruchomić skrypt PowerShell, możesz sprawdzić bieżący proces uprawnień administracyjnych bezpośrednio w kodzie PS.

Poniższego kodu PowerShell można użyć do sprawdzenia, czy bieżący skrypt działa w trybie „Uruchom jako administrator”, czy nie:

Host zapisu „Sprawdzanie uprawnień administratora ...”
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] „Administrator”))
Ostrzeżenie: „Niewystarczające uprawnienia do uruchomienia tego skryptu. Otwórz konsolę PowerShell z uprawnieniami administratora i ponownie uruchom skrypt”
Przerwa

jeszcze
Write-Host „Istnieją uprawnienia administratora - kontynuuj skrypt ...” -ForegroundColor Green

Zapisz kod PowerShell w pliku check_perms.ps1 i uruchom go w konsoli bez uprawnień administratora:

C: \ PS \ check_perms.ps1

Jak widać, pojawił się napis, że nie ma uprawnień administratora, więc skrypt PowerShell przestał działać.

Uruchom ten skrypt teraz w podwyższonej sesji PowerShell. Jak widać, skrypt ustalił, że ta sesja PowerShell działa z uprawnieniami administratora.

Możesz uruchamiać skrypty PowerShell z uprawnieniami administratora bezpośrednio z Eksploratora Windows.

Możesz również poprosić o podniesienie uprawnień bezpośrednio ze skryptu PowerShell, zamiast tego:

Ostrzeżenie: „Za mało praw”

Użyj kodu

Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs

Po uruchomieniu skryptu bez uprawnień administratora skrypt zostanie zrestartowany w nowej uprzywilejowanej sesji PowerShell i pojawi się żądanie UAC dotyczące podniesienia uprawnień.

Jeśli włączysz eskalację uprawnień, skrypt PS1 będzie uruchamiany z uprawnieniami administratora (ścieżka do bieżącego pliku skryptu PowerShell jest przekazywana przez zmienną środowiskową $ PSCommandPath).

W PowerShell 4.0 i nowszych jeszcze łatwiej jest sprawdzić uprawnienia administratora. Aby to zrobić, skorzystaj z dyrektywy -RunAsadministrator.

#requires -version 4.0
#requires -RunAsAdministrator
Write-Host „PowerShell został uruchomiony jako administrator” -ForegroundColor Green

Jeśli skrypt nie jest uruchamiany przez administratora, pojawi się błąd:

Nie można uruchomić skryptu „check_perms.ps1”, ponieważ zawiera on instrukcję „#requires” do działania jako administrator. Bieżąca sesja Windows PowerShell nie działa jako administrator. Uruchom program Windows PowerShell, używając opcji Uruchom jako administrator, a następnie spróbuj ponownie uruchomić skrypt.
W linii: 1 znak: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation

Jeśli uruchomisz ten skrypt na komputerze z programem PowerShell v2, pojawi się błąd:

Nie można przetworzyć instrukcji „#requires” w wierszu 2, ponieważ nie ma ona prawidłowego formatu.
Instrukcja „#requires” musi mieć jeden z następujących formatów:
„#Requires -shellid”
„#Requires -version”
„#Requires -pssnapin [-version]”

Aby zarządzać usługą Active Directory, możesz potrzebować innego zadania: ze skryptu PowerShell musisz sprawdzić, czy bieżący użytkownik ma uprawnienia administratora domeny. Użyj następującego kodu:

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

# użytkownik, który uruchomił skrypt, ma uprawnienia Administratorów domeny

W przeciwnym razie

# brak praw Administratorzy domeny