Controllare se uno script stato avviato con privilegi amministrativi

Vi sono casi in cui è necessario creare script che però devono essere avviati con privilegi amministrativi e quindi può essere utile inserire nello script tale controllo per dare un avvertimento nel caso lo script sia astato avviato senza i privilegi necessari.

In Powershell inserire questo controllo è decisamente semplice basta infatti inserire nello script, ad esempio all’inizio, il seguente statement:

#Requires -RunAsAdministrator

Se l’utente che ha avviato lo script non dispone dei privilegi necessari verrà restituito il seguente errore:

“Impossibile eseguire lo script ‘ScriptName.ps1’ perché è incluso in un’istruzione “#requires” per l’esecuzione come amministratore. La sessione corrente di Windows PowerShell non è in esecuzione come amministratore. Avviare Windows PowerShell utilizzando l’opzione Esegui come amministratore e quindi provare di nuovo a eseguire lo script.”

Per ulteriori informazioni si veda About Requires

– A script can include more than one #Requires statement.

– The #Requires statements can appear on any line in a script.

Placing a #Requires statement inside a function does NOT limit its scope. All #Requires statements are always applied globally, and must be met, before the script can execute.

Warning

Even though a #Requires statement can appear on any line in a script, its position in a script does not affect the sequence of its application.

The global state the #Requires statement presents must be met before script execution.

– RunAsAdministrator

When this switch parameter is added to your requires statement, it specifies that the PowerShell session in which you are running the script must be started with elevated user rights (Run as Administrator). The RunAsAdministrator parameter is ignored on a non-Windows operating system.

 

Negli script DOS un’analoga funzionalità può essere implementata controllando i gruppi a cui l’utente appartiene tramite il comando whoami /groups verificando se tra i gruppi restituiti ne esiste uno con il SID S-1-16-12288 che come indicato nella KB243330 Well-known security identifiers in Windows operating systems identifica il seguente:

SID: S-1-16-12288
Name: High Mandatory Level
Description: A high integrity level.

Per un esempio si veda il seguente:

@ECHO OFF

WHOAMI /GROUPS | FIND “S-1-16-12288” > nul

IF NOT ERRORLEVEL 1 (

ECHO The user HAS administrative privileges

) ELSE (

ECHO The user DOES NOT HAVE administrative privileges

)

PAUSE

Lo script è anche disponibile nel mio repository su GitHub dedicato agli scripts batch nella sezione Security, link diretto è il seguente https://github.com/ermannog/BatchScripts/blob/master/Security/Check-AdminRights.cmd.