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

Как проверить права администратора в скрипте 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

Сохраните PowerShell код в файл check_perms.ps1 и запустите в консоли без прав администратора:

C:PScheck_perms.ps1

Как вы видите, появилась надпись, что прав администратора нет, поэтому работа PowerShell скрипта прекращена.

нет прав админа для запуска powershell скрипта

Запустите теперь этот скрип в сессии PowerShell с повышенными привилегиями. Как видите, скрипт определил, что данный сеанс PowerShell выполняется с правами администратора.

проверка прав администратора в скрипте powershell

Также вы можете прямо из скрипта PowerShell запросить повышение привилегий, для этого вместо строки:

Write-Warning "Недостаточно прав”

Используйте следующий код для запуска процесса:

Start-Process Powershell -ArgumentList $PSCommandPath -Verb RunAs

При запуске скрипта без прав администратора, этот скрипт перезапустится в новом привилегированном сеанс PowerShell и появится запрос UAC на повышение привилегий.

Если вы разрешите повышение привилегий, ваш PS1 скрипт будет запущен с правами администратора (путь к текущему файлу скрипта PowerShell передается через переменную окружения $PSCommandPath).

uac для запуска powershell скрипта с правами администратора

В 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

The powershell script cannot be run because it contains a "#requires" statement for running as Administrator

Если запустить это скрип на компьютере с 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 [-version

Для управления Active Directory вам может понадобится другая задача: из скрипта PowerShell нужно проверить, что у текущего пользователя есть права администратора домена. Используйте следующий код:

If(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Domain Admins"))
{
#у пользователь запустившего скрипт есть права Domain Admins
}
Else
{
#нет прав Domain Admins
}

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