Если для выполнения некоего скрипта 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 запросить повышение привилегий, для этого вместо строки:
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
Если скрипт запущен не под администратором, появится ошибка:
At line:1 char:1
+ C:\PS\check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (check_perms.ps1:String) [], ScriptRequiresException
+ FullyQualifiedErrorId : ScriptRequiresElevation
Если запустить это скрип на компьютере с PowerShell v2 появится ошибка:
The «#requires» statement must be in one of the following formats:
«#requires -shellid <shellID>»
«#requires -version <major.minor>»
«#requires -pssnapin <psSnapInName> [-version <major.minor>]»
Для управления Active Directory вам может понадобится другая задача: из скрипта PowerShell нужно проверить, что у текущего пользователя есть права администратора домена. Используйте следующий код:
If(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Domain Admins"))
{
#у пользователь запустившего скрипт есть права Domain Admins
}
Else
{
#нет прав Domain Admins
}