Способы проверить, выполняется ли сценарий PowerShell с повышенными привилегиями

Чтобы проверить, запущен ли сценарий PowerShell с повышенными привилегиями (т. е. от имени администратора), вы можете использовать различные методы. Вот несколько примеров различных подходов, а также фрагменты кода:

Метод 1: проверка текущего принципала

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$isAdmin = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($isAdmin) {
    Write-Host "Script is running with elevated privileges."
} else {
    Write-Host "Script is not running with elevated privileges."
}

Метод 2: использование политики выполнения

$executionPolicy = Get-ExecutionPolicy
if ($executionPolicy -eq "Bypass" -or $executionPolicy -eq "Unrestricted") {
    Write-Host "Script is running with elevated privileges."
} else {
    Write-Host "Script is not running with elevated privileges."
}

Метод 3. Проверка виртуализации UAC

$uacEnabled = [bool]((Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System").EnableLUA)
if ($uacEnabled) {
    Write-Host "Script is running with elevated privileges."
} else {
    Write-Host "Script is not running with elevated privileges."
}

Метод 4. Проверка уровня целостности процесса

$process = Get-Process -Id $PID
$integrityLevel = $process.GetAccessControl().GetOwner().Value
if ($integrityLevel -eq "S-1-16-12288") {
    Write-Host "Script is running with elevated privileges."
} else {
    Write-Host "Script is not running with elevated privileges."
}