Ако трябва да го стартирате с права на администратор, за да стартирате скрипт PowerShell, можете да проверите текущия процес за административни привилегии директно в PS кода.
Следният код на PowerShell може да се използва, за да се провери дали текущият скрипт работи в режим „Изпълнение като администратор“ или не:
Напишете-домакин "Проверка за администраторски права ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] "Администратор"))
Предупреждение за писане "Недостатъчни разрешения за стартиране на този скрипт. Отворете конзолата PowerShell с права на администратор и стартирайте скрипта отново"
почивка
друго
Напишете-домакин "Има права на администратор - продължете скрипта ..." -ForegroundColor Green
Запишете кода на PowerShell във файла check_perms.ps1 и го стартирайте в конзолата без права на администратор:
C: \ PS \ check_perms.ps1
Както можете да видите, се появи надпис, че няма права на администратор, така че скриптът PowerShell спря да работи.
Стартирайте този скрипт сега в повишена сесия PowerShell. Както можете да видите, скриптът определи, че тази сесия на PowerShell работи с права на администратор.
Можете да стартирате скриптове на PowerShell с права на администратор директно от Windows Explorer.Можете също да поискате повишаване на привилегиите директно от скрипта PowerShell, за това вместо реда:
Предупреждение за писане „Няма достатъчно права“
Използвайте код
Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs
Когато стартирате скрипта без права на администратор, този скрипт ще се рестартира в нова привилегирана сесия PowerShell и ще се появи UAC заявка за повишаване на привилегиите.
Ако активирате ескалация на привилегии, вашият PS1 скрипт ще се изпълнява с права на администратор (пътят към текущия файл на скрипт PowerShell се предава през променливата на средата $ PSCommandPath).
В PowerShell 4.0 и по-нови версии е още по-лесно да проверите за администраторски права. За целта използвайте директивата -RunAsAdministrator.
#requires -версия 4.0
#requires -RunAsAdministrator
Напишете-домакин „PowerShell стартира като администратор“ -ForegroundColor Green
Ако скриптът не се изпълнява под администратора, ще се появи грешка:
Скриптът „check_perms.ps1“ не може да бъде стартиран, тъй като съдържа изявление „#requires“ за стартиране като администратор. Текущата сесия на Windows PowerShell не се изпълнява като администратор. Стартирайте Windows PowerShell, като използвате опцията Run as Administrator и след това опитайте да стартирате скрипта отново.На ред: 1 char: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation
Ако стартирате този скрипт на компютър с PowerShell v2, се появява грешка:
Не може да се обработи операторът "#requires" на ред 2, защото не е в правилния формат.Изявлението "#requires" трябва да бъде в един от следните формати:
"#Изисква -шелид"
„#Изисква -версия“
"#Requires -pssnapin [-version]"
За да управлявате Active Directory, може да ви е необходима друга задача: от скрипта PowerShell трябва да проверите дали текущият потребител има права на администратор на домейн. Използвайте следния код:
If (([[[Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole („Администратори на домейни“))
# потребителят, стартирал скрипта, има права за администратор на домейн
още
# no права Домейни администратори