AppScript-I. Tester le niveau de privilèges

I. Présentation

Normalement, ce contrôle est inutile pour les scripts exécutés via le MDT. En effet, celui-ci s’assure que le contexte d’exécution soit toujours réalisé avec le niveau de privilèges maximum.

Depuis Vista, en raison de l’UAC (Contrôle de compte d’utilisateur) vous savez que l’appartenance à un groupe Administrateur n’est pas suffisante pour garantir un niveau de privilège nécessaire à une installation.

.
_IsAdmin

II. Tester le niveau de privilège nécessaire à une installation

(Batch)
En batch, cet exemple permet de vérifier que le contexte d’exécution à le niveau de privilège maximum.

@echo off
whoami /groups | findstr "S-1-16-12288" > nul && set runLevel=maximum
echo Niveau de privilege : %runLevel%

Ou cet exemple plus pédagogique et détaillé

@Echo Off
Echo Le compte actuel "%userdomain%\%USERNAME%"
whoami /groups /fo list | findstr "Admin" > nul
if %errorlevel%==0 (echo est membre d'un groupe Administrateurs) else (echo N'est pas membre d'un groupe Administrateurs)
whoami /groups|findstr S-1-16-12288 > nul
if %errorlevel%==0 (echo Et dispose d'un niveau de privileges maximum) else (echo Et dispose d'un niveau d'utilisateur standard)

Echo Ce compte est aussi membre des groupes suivants
whoami /groups /fo list | findstr "groupe:"

Pause

(VBscript)
En vbscript, la méthode peut être choisie dans la même veine.

Dim oShell, oExec, szStdOut
szStdOut = "" 
Set oShell = CreateObject("WScript.Shell")
Set oExec = oShell.Exec("whoami /groups") 

Do While (oExec.Status = cnWshRunning)
    WScript.Sleep 100
    If not oExec.StdOut.AtEndOfStream Then
       szStdOut = szStdOut & oExec.StdOut.ReadAll
    End If
Loop

Select case oExec.ExitCode
   case 0       
   If not oExec.StdOut.AtEndOfStream Then
       szStdOut = szStdOut & oExec.StdOut.ReadAll
   end If
   if instr(szStdOut,"S-1-16-12288") Then
       WScript.echo "Niveau Elevé (Admin)"
   Else
      if instr(szStdOut,"S-1-16-8192")  Then
          wscript.echo "Niveau Moyen (Standard)"
      else               
          wscript.echo "Niveau inconnu !"
      end If
   End If
   case else       
       if not oExec.StdErr.AtEndOfStream Then
          wscript.echo oExec.StdErr.ReadAll
        End If
End select

Vous pouvez également vous inspirer de l’exemple fourni ici http://forum.sysinternals.com/tip-start-explorerexe-elevated-with-uac-enabled_topic29229.html

Note : Pour rappel, certains processus tels que “explorer.exe” ne peuvent pas être élevés au sein d’une session. Pour disposer d’un explorateur graphique en mode admin, vous pouvez utiliser des outils alternatifs tels que “Explorer++” (http://explorerplusplus.com/ )

(PShell)
En Powershell, la gestion des privilèges est plus riche.

function isadmin
 {
 # Retourne "true" si le contexte dispose du niveau de privilèges Administrateur, "false" sinon
 ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 } 

Depuis PowerShell v4.0, vous pouvez simplement ajouter la directive suivante en début de script :

 
#Requires -RunAsAdministrator

 

Retour au sujet principal

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Apprenez comment les données de vos commentaires sont utilisées.