El script de elevación automática de PowerShell no funciona si se escribe como una función en el perfil de usuario

El script de elevación automática de PowerShell no funciona si se escribe como una función en el perfil de usuario

Poner este código en un script de PowerShell lo hace autoelevable:

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
        [Security.Principal.WindowsBuiltInRole] 'Administrator'))
    {
        Start-Process PowerShell -ArgumentList "-File", ('"{0}"' -f $MyInvocation.MyCommand.Path) -Verb RunAs
        exit
    }

#Main code here

Sin embargo, cuando se crea una función para usar en el perfil de usuario de PS y se llama a la función desde un script, no funciona. Se abre una nueva sesión de administrador de PowerShell, pero no se lee el código del script principal.

function Elevate-NoAdmin
{
    if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
        [Security.Principal.WindowsBuiltInRole] 'Administrator'))
    {
        Start-Process PowerShell -ArgumentList "-File", ('"{0}"' -f $MyInvocation.MyCommand.Path) -Verb RunAs
        exit
    }
}

¿Alguna idea de por qué no funciona como función y si se puede hacer que funcione?

Respuesta1

Se reescribió la función definiendo un parámetro que facilite el paso de la ruta del script como una variable a la función en el perfil de usuario de PS. De lo contrario, utilizará la ruta del perfil de usuario de PS.

function Elevate-NoAdmin
{
    param(
    [Parameter(Mandatory)]
    [String]$ScriptPath
    )
    
    if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::
        GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator'))
    {
        Start-Process -FilePath PowerShell.exe -Args "-File `"$ScriptPath`"" -Verb RunAs
        exit
    }
}

En guión:

Elevate-NoAdmin $PSCommandPath

#Main code here

o

Elevate-NoAdmin $MyInvocation.MyCommand.Path

#Main code here

información relacionada