Как проверить, запущен ли скрипт PowerShell от имени администратора?

Если вам нужно запустить сценарий PowerShell с правами администратора, вы можете проверить, имеет ли текущий процесс powershell.exe повышенные права, прямо в вашем коде PS.

Следующий код PowerShell можно использовать для проверки того, работает ли текущий сценарий в режиме «Запуск от имени администратора»:

Write-Host "Checking for elevated permissions..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "Insufficient permissions to run this script. Open the PowerShell console as an administrator and run this script again."
Break
}
else {
Write-Host "Code is running as administrator — go on executing the script..." -ForegroundColor Green
}

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

C:\PS\check_process_elevation.ps1

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

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

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

Write-Warning "Insufficient permissions…"

используйте следующий код:

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 is run as administrator" -ForegroundColor Green

Если скрипт не запускается под администратором, появится следующая ошибка:

The script ‘check_process_elevation.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:\PS\check_process_elevation.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (check_process_elevation.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 <shellID>”
“#requires -version <major.minor>”
“#requires -pssnapin <psSnapInName> [-version ]”

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo