Ejecute el script de PowerShell como administrador
-
Uso del cmdlet
Start-Process
para ejecutar el script de PowerShell como administrador - Ejecute el script de PowerShell con argumentos como administrador
- Ejecute PowerShell Script como administrador mientras conserva el directorio de trabajo
La mayoría de los scripts que escribimos y ejecutamos requerirán permisos, lo que lleva a un administrador a ejecutar los scripts desde un indicador elevado de PowerShell. En PowerShell, elevamos nuestros permisos ejecutando Windows PowerShell con privilegios de administrador e ingresando nuestras credenciales de administrador.
Sin embargo, es posible que necesitemos ejecutar nuestros scripts sin problemas para situaciones específicas sin ingresar las credenciales de administrador. Por lo tanto, podemos integrar varios comandos de autoelevación al comienzo de nuestros scripts, y le mostraremos cómo hacerlo en este artículo.
Uso del cmdlet Start-Process
para ejecutar el script de PowerShell como administrador
El cmdlet Start-Process
inicia uno o más procesos, archivos ejecutables o de script, o cualquier archivo que un software instalado pueda abrir en la computadora local, incluido Windows PowerShell.
Con este cmdlet y un conjunto de parámetros, podemos ejecutar Windows PowerShell como administrador.
Para este ejemplo, hemos creado un script Hello_World.ps1, que generará una cadena simple Hello World
dentro de nuestra consola.
Hello_World.ps1
:
Write-Output 'Hello World!'
Podemos usar el archivo de PowerShell anterior como ejemplo para comprobar y verificar si estamos ejecutando nuestros scripts con privilegios de administrador. Para comenzar, ejecute el fragmento de código a continuación.
Nota: Es posible que Windows PowerShell aún deba solicitar su confirmación debido al Control de cuentas de usuario (UAC) de su computadora local. No recomendamos deshabilitar completamente UAC por motivos de seguridad.
Start-Process powershell -verb RunAs -ArgumentList ".\Hello_World.ps1"
Al ejecutar el script anterior, generará una nueva instancia de Windows PowerShell con derechos administrativos. La única advertencia para el script ejecutado anteriormente es que si necesitamos pasar argumentos a nuestro archivo de PowerShell, no transferiremos los argumentos a la consola administrativa recién generada.
Ejecute el script de PowerShell con argumentos como administrador
Este ejemplo puede tomar nuestro script anterior de una sola línea y revisarlo dentro de múltiples declaraciones condicionales.
# Self-elevate the script if required
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
$Command = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
Start-Process -FilePath PowerShell.exe -Verb RunAs -ArgumentList $Command
Exit
}
}
# Place your script here
Write-Output 'Hello World!'
Anteriormente, ejecutamos nuestro script de PowerShell llamando a un archivo separado, pero podemos simplemente colocar nuestro script (por ejemplo, Hello_World.ps1) debajo de este fragmento para este ejemplo.
Así es como funciona el fragmento.
- La primera instrucción
if
comprueba si el script ejecutado ya se está ejecutando en Windows PowerShell con privilegios administrativos. - La segunda declaración
if
comprueba si el número de compilación del sistema operativo Windows es 6000 o superior. (Windows Vista o Windows Server 2008 o posterior) - La variable
$Command
recupera y guarda el comando utilizado para ejecutar el script, incluidos los argumentos. - El
Start-Process
inicia una nueva instancia de Windows PowerShell con privilegios elevados y vuelve a ejecutar el script como nuestro script anterior.
Ejecute PowerShell Script como administrador mientras conserva el directorio de trabajo
Es posible que necesitemos conservar el directorio de trabajo del script para situaciones específicas. Entonces, aquí hay un fragmento autoelevador que mantendrá el directorio de trabajo:
if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
Exit;
}
}
# Place your script here
Write-Output 'Hello World!'
En este fragmento, pasamos $PSCommandPath
como uno de los argumentos dentro del cmdlet Start-Process
para conservar el directorio de trabajo donde se ejecutó el script.
Preservar el directorio de trabajo es vital para realizar operaciones relativas a la ruta. Desafortunadamente, los dos fragmentos anteriores que mostramos anteriormente no mantendrán su ruta, lo que puede causar errores inesperados. Por lo tanto, puede utilizar la sintaxis revisada anterior.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn