
Поскольку я не могу найти альтернативу Linux'уsudo
команда возвышения, у меня следующий вопрос:
Как определить функцию PowerShell, которая требует повышения прав? Я имею в виду запрос UAC.
Скажем, такая функция имеет вид:
function system-check {
SFC /ScanNow
}
Система:
Windows 8.1 Профессиональная 64-битная
PowerShell:
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
ПРАВКА1:
Чтобы быть на 100% понятным, позвольте мне перефразировать:
- Я запускаю PowerShell как пользователь
- Я запускаю вышеупомянутую функцию
system-check
- Я хочу, чтобы функция была повышена, чтобы иметь возможность выполнить команду; обратите внимание, что я хочу, чтобы появилось приглашение UAC
решение1
Чтобы выполнить определенную команду из окна с повышенными правами:
Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs
Например:
Start-Process -FilePath powershell.exe -ArgumentList {
SFC /scannow
} -verb RunAs
Чтобы запустить определенный скрипт из окна с повышенными правами:
Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs
Чтобы запустить весь сеанс PowerShell с запросом UAC:
Start-Process powershell.exe -Verb runAs
Функция, возвращающая $True или $False, если текущее окно запущено с повышенными правами:
function isadmin
{
#Returns true/false
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
Чтобы гарантировать, что скрипт будет запускаться только от имени администратора, добавьте в начало следующее:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Echo "This script needs to be run As Admin"
Break
}
В PowerShell v4.0 вышеприведенный пример можно упростить, используя оператор #Requires:
#Requires -RunAsAdministrator
Источник:Запуск с повышенными правами доступа