Якщо для виконання якогось скрипта PowerShell потрібно, щоб він був запущено з правами адміністратора, ви можете прямо в PS коді виконати перевірку на наявність адміністративних привілеїв у пов'язаних з поточною діяльністю.
Наступний PowerShell код можна використовувати, щоб перевірити, запущён чи поточний скрипт в режимі "Run as Administrator" чи ні:
Write-Host "Перевірка наявності прав адміністратора ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ( '
[Security.Principal.WindowsBuiltInRole] "Administrator"))
Write-Warning "Недостатньо прав для виконання цього скрипта. Відкрийте консоль PowerShell з правами адміністратора і запустіть скрипт ще раз"
Break
else
Write-Host "Права адміністратора є - продовжити скрипт ..." -ForegroundColor Green
Збережіть PowerShell код в файл check_perms.ps1 і запустіть в консолі без прав адміністратора:
C: \ PS \ check_perms.ps1
Як ви бачите, з'явився напис, що прав адміністратора немає, тому робота PowerShell скрипта припинена.
Запустіть тепер цей скрип в сесії PowerShell з підвищеними привілеями. Як бачите, скрипт визначив, що даний сеанс PowerShell виконується з правами адміністратора.
Ви можете запускати скрипти PowerShell з правами адміністратора прямо з провідника Windows.Також ви можете прямо з скрипта PowerShell запросити підвищення привілеїв, для цього замість рядка:
Write-Warning "Недостатньо прав"
використовуйте код
Start-Process Powershell -ArgumentList $ PSCommandPath -Verb RunAs
При запуску скрипта без прав адміністратора, цей скрипт увімкнеться знову в новому привілейованому сеанс PowerShell і з'явиться запит UAC на підвищення привілеїв.
Якщо ви дозволите підвищення привілеїв, ваш PS1 скрипт буде запущено з правами адміністратора (шлях до поточного файлу скрипта PowerShell передається через змінну оточення $ PSCommandPath).
У PowerShell 4.0 і вище ще простіше виконати перевірку наявності прав адміністратора. Для цього потрібно використовувати директиву -RunAsAdministrator.
#requires -version 4.0
#requires -RunAsAdministrator
Write-Host "PowerShell запущений з правами адміністратора" -ForegroundColor Green
Якщо скрипт запущений не під адміністратором, з'явиться помилка:
The script 'check_perms.ps1' can not be run because it contains a «#requires» statement for running as Administrator. The current Windows PowerShell session is not running as Administrator. Start Windows PowerShell by using the Run as Administrator option, and then try running the script again.At line: 1 char: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation
Якщо запустити це скрип на комп'ютері з PowerShell v2 з'явиться помилка:
Can not process the «#requires» statement at line 2 because it is not in the correct format.The «#requires» statement must be in one of the following formats:
«#Requires -shellid»
«#Requires -version»
«#Requires -pssnapin [-version]»
Для управління Active Directory вам може знадобиться інша задача: з скрипта PowerShell потрібно перевірити, що у поточного користувача є права адміністратора домена. Використовуйте наступний код:
If (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ( "Domain Admins"))
# У користувач запустив скрипт є права Domain Admins
Else
# Немає прав Domain Admins