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