
Já que não consigo encontrar nenhuma alternativa ao Linux'sudo
comando de elevação, tenho a seguinte dúvida:
Como definir uma função do PowerShell que requer elevação? Quero dizer, prompt do UAC.
Digamos que tal função segue:
function system-check {
SFC /ScanNow
}
Sistema:
Windows 8.1 Pro de 64 bits
PowerShell:
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
EDITAR1:
Para ser 100% compreensível, deixe-me reformular:
- Eu executo o PowerShell como usuário
- Eu executo a função mencionada
system-check
- Quero que a função seja elevada para poder executar o comando; observe que quero que o prompt do UAC apareça
Responder1
Para executar um comando específico em uma janela elevada:
Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs
Por exemplo:
Start-Process -FilePath powershell.exe -ArgumentList {
SFC /scannow
} -verb RunAs
Para executar um script específico em uma janela elevada:
Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs
Para executar uma sessão inteira do PowerShell solicitando o UAC:
Start-Process powershell.exe -Verb runAs
Uma função para retornar $True ou $False se a janela atual estiver sendo executada com permissões elevadas:
function isadmin
{
#Returns true/false
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
Para garantir que um script seja executado apenas como administrador, adicione isto ao início:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Echo "This script needs to be run As Admin"
Break
}
No PowerShell v4.0, o acima pode ser simplificado usando uma instrução #Requires:
#Requires -RunAsAdministrator