Как да проверите администраторските права в скрипт на PowerShell?

Ако трябва да го стартирате с права на администратор, за да стартирате скрипт 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 права Домейни администратори