Visualizzazione post con etichetta privilegi elevati. Mostra tutti i post
Visualizzazione post con etichetta privilegi elevati. Mostra tutti i post

giovedì 5 luglio 2018

PowerShell: Forzare l'esecuzione di uno script con privilegi elevati

Chi crea script PowerShell sa bene che alcune operazioni, per essere portate correttamente a termine, richiedono l'esecuzione con privilegi elevati. Purtroppo non c'è la possibilità di cliccare con il tasto destro del mouse sul file PS1 e selezionare "Esegui come amministratore" dal menu contestuale come avviene ad esempio con i file eseguibili. 
A questa mancanza è possibile sopperire aggiungendo allo script il seguente codice pubblicato sullo Script Center di Microsoft:

function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
     
    param([Switch]$Check) 
     
    $IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()` 
        ).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
         
    if ($Check) { return $IsAdmin }     
 
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file `"$($MyInvocation.ScriptName)`"" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction 'stop'  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break               
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else  
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 

La function, che va richiamata prima di eseguire altre operazioni, non fa altro che verificare se lo script è stato eseguito in una console con i permessi di amministratore e, in caso contrario, provvede autonomamente a rilanciarlo con i permessi elevati.
Se non è stato fatto il login con un utenza amministrativa verranno richieste le credenziali.
PowerShell, Esecuzione script con privilegi elevati
FIG 1 - PowerShell, Esecuzione script con privilegi elevati

Dal seguente link è possibile scaricare lo script di esempio
DOWNLOAD



giovedì 28 luglio 2016

Programmazione Batch: Verificare se lo script è stato eseguito come Amministratore (privilegi elevati)

In alcuni casi può essere utile verificare se lo script batch da noi realizzato è stato eseguito come amministratore (con privilegi elevati). Un modo veloce per effettuare la verifica all'interno dello script è attraverso una particolare variabile d'ambiente: %errorlevel%. Questa variabile contiene un valore relativo all'esito di gran parte dei comandi/programmi: quando un comando viene portato a termine correttamente il valore di %errorlevel% sarà uguale a 0.

Alcuni comandi, come openfiles, NET SESSION, ecc. richiedono privilegi elevati per essere eseguiti e questo li rende adatti al nostro scopo infatti, tentando di eseguire questi comandi normalmente (senza privilegi elevati), verranno terminati con errore e alla variabile %errorlevel% verrà assegnato un valore diverso da 0 (FIG 1).


Variabile d'ambiente %errorlevel%
FIG 1 - Variabile d'ambiente %errorlevel%


Nello script batch che è possibile scaricare dal link DOWNLOAD la verifica viene effettuata proprio con il comando openfiles. L'output del comando viene scartato dirottandolo su NUL (>nul 2>&1) e viene verificata la variabile d'ambiente %errorlevel%: se la variabile ha valore 0 allora il nostro script è stato eseguito con privilegi elevati e possiamo proseguire con le altre istruzioni, in caso contrario lo script termina senza eseguire altre operazioni. Le istruzioni principali del nostro script sono dunque le seguenti:


openfiles>nul 2>&1
if %errorlevel%==0 goto AdminOK