Как проверить права администратора в скрипте PowerShell?
Если для выполнения некоего скрипта 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:PScheck_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
Если скрипт запущен не под администратором, появится ошибка:
The script ‘check_perms.ps1’ cannot 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:PScheck_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (check_perms.ps1:String) [], ScriptRequiresException
+ FullyQualifiedErrorId : ScriptRequiresElevation
Если запустить это скрип на компьютере с PowerShell v2 появится ошибка:
Cannot 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
Для управления Active Directory вам может понадобится другая задача: из скрипта PowerShell нужно проверить, что у текущего пользователя есть права администратора домена. Используйте следующий код:
If(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Domain Admins"))
{
#у пользователь запустившего скрипт есть права Domain Admins
}
Else
{
#нет прав Domain Admins
}
Windows 10
Как проверить права администратора в скрипте PowerShell?