
Como no encuentro ninguna alternativa a Linux'sudo
comando de elevación, tengo la siguiente pregunta:
¿Cómo definir una función de PowerShell que requiere elevación? Me refiero al aviso de UAC.
Digamos que dicha función es la siguiente:
function system-check {
SFC /ScanNow
}
Sistema:
Windows 8.1 Pro de 64 bits
Potencia Shell:
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
EDITAR1:
Para ser 100% comprensible permítanme reformular:
- Ejecuto PowerShell como usuario
- Ejecuto la función antes mencionada.
system-check
- Quiero que la función se eleve para poder ejecutar el comando; tenga en cuenta que quiero que aparezca el mensaje UAC
Respuesta1
Para ejecutar un comando específico desde una ventana elevada:
Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs
Por ejemplo:
Start-Process -FilePath powershell.exe -ArgumentList {
SFC /scannow
} -verb RunAs
Para ejecutar un script específico desde una ventana elevada:
Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs
Para ejecutar una sesión completa de PowerShell solicitando UAC:
Start-Process powershell.exe -Verb runAs
Una función para devolver $True o $False si la ventana actual se ejecuta con permisos elevados:
function isadmin
{
#Returns true/false
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
Para garantizar que un script solo se ejecute como administrador, agregue esto al principio:
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Echo "This script needs to be run As Admin"
Break
}
En PowerShell v4.0, lo anterior se puede simplificar usando una declaración #Requires:
#Requires -RunAsAdministrator