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

Как можно реализовать запрос на повышение привилегий с помощью окна UAC при запуске скрипта .ps1 в PowerShell, чтобы скрипт запускался от имени администратора при подтверждении, а в случае отказа скрипт завершался? Вам нужна помощь в переводе кода, который работает в командной строке, на PowerShell?
  • 17 апреля 2024 г. 6:19
Ответы на вопрос 2
Для запуска скрипта в PowerShell с повышенными правами администратора, можно использовать следующий код:

```powershell
# Запрос на повышение привилегий с помощью окна UAC
$processStartInfo = New-Object System.Diagnostics.ProcessStartInfo
$processStartInfo.FileName = "powershell.exe"
$processStartInfo.Arguments = "-NoProfile -ExecutionPolicy Bypass -File C:\путь\к\вашему\скрипту.ps1"
$processStartInfo.Verb = "runas"

# Запуск процесса с повышенными правами
$process = [System.Diagnostics.Process]::Start($processStartInfo)
$process.WaitForExit()

# Проверка статуса завершения процесса
if ($process.ExitCode -ne 0) {
    Write-Host "Скрипт завершился с ошибкой."
}
```

Этот код запускает PowerShell с аргументами для выполнения вашего скрипта .ps1 с повышенными правами администратора через UAC. Если пользователь подтверждает запрос на повышение привилегий, скрипт будет выполнен от имени администратора. Если пользователь отказывает, скрипт завершается.

Пожалуйста, замените "C:\путь\к\вашему\скрипту.ps1" на путь к вашему скрипту перед запуском кода.
получилось что-то такое: 
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
    $scriptPath = $MyInvocation.MyCommand.Path
    $arguments = "-NoProfile -ExecutionPolicy Bypass -File `"$scriptPath`""
    Start-Process powershell -ArgumentList $arguments -Verb RunAs
    Exit
}
Похожие вопросы