Si necesita ejecutar un script de PowerShell con privilegios de administrador, puede verificar si el proceso actual de powershell.exe tiene los permisos elevados directamente en su código PS.

El siguiente código de PowerShell se puede utilizar para comprobar si el script actual se está ejecutando en el modo "Ejecutar como administrador":

Write-Host "Checking for elevated permissions..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
[Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "Insufficient permissions to run this script. Open the PowerShell console as an administrator and run this script again."
Break
}
else {
Write-Host "Code is running as administrator — go on executing the script..." -ForegroundColor Green
}

Guarde el código de PowerShell en el check_process_elevation.ps1 archivo y ejecútelo en la consola sin los privilegios de administrador:

C:PScheck_process_elevation.ps1

Como puede ver, apareció el mensaje de que no tiene privilegios de administrador, por lo que el script de PowerShell se ha detenido.

Ahora ejecute el script en la sesión elevada de PowerShell. Como puede ver, el script ha detectado que esta sesión de PowerShell se ejecuta como administrador.

comprobar si un proceso de PowerShell se está ejecutando como administrador (elevado)

También puede solicitar la elevación directamente desde el script de PowerShell. Para hacerlo, en lugar de la cadena:

Write-Warning "Insufficient permissions…”

usa el siguiente código:

Start-Process Powershell -ArgumentList $PSCommandPath -Verb RunAs

Cuando ejecute el script sin los privilegios de administrador, se volverá a ejecutar en la nueva sesión elevada de PowerShell y verá un mensaje de elevación de UAC. Si lo acepta, su script de PS1 se ejecutará como administrador. (La ruta al archivo actual del script de PowerShell se transfiere usando el $PSCommandPath Variable ambiental.)

uac promt para elevar el script de powershell

En PowerShell 4.0 o posterior, es aún más fácil verificar si su script se ejecuta con privilegios de administrador. Para hacerlo, use el -Ejecutar como administrador directiva.

#requires -version 4.0
#requires –RunAsAdministrator
Write-Host "PowerShell is run as administrator" -ForegroundColor Green

Si el script no se ejecuta bajo el administrador, aparecerá el siguiente error:

The script ‘check_process_elevation.ps1’ cannot be run because it contains a “#requires” statement for running as Administrator. The current Windows PowerShell session is not running as Administrator. Start Windows PowerShell by using the Run as Administrator option, and then try running the script again.
At line:1 char:1
+ C:PScheck_process_elevation.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (check_process_elevation.ps1:String) [], ScriptRequiresException
+ FullyQualifiedErrorId : ScriptRequiresElevation

PowerShell ScriptRequiresElevation

Si ejecuta el script en una computadora con PowerShell v2, aparecerá el siguiente mensaje de error:

Cannot process the “#requires” statement at line 2 because it is not in the correct format.
The “#requires” statement must be in one of the following formats:
“#requires -shellid <shellID>”
“#requires -version <major.minor>”
“#requires -pssnapin <psSnapInName> [-version <major.minor>]”

Para administrar Active Directory, es posible que necesite otra tarea: verificar si el usuario actual tiene los privilegios de administrador de dominio de un script de PowerShell. Utilice el siguiente código:

If(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Domain Admins"))
{
#a user running the script has the Domain Admins rights
}
Else
{
#no Domain Admins rights
}

Recomendado para ti