Чтобы проверить, запущен ли сценарий 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."
}