Comment créer un fichier batch pour exécuter cmd en tant qu'administrateur ?

Je dois exécuter un fichier batch qui doit enregistrer une DLL. L'enregistrement de la DLL échoue parce que le fichier batch ne démarre pas l'invite de commande en tant qu'"administrateur".

Existe-t-il un moyen de lancer l'invite de commande en tant qu'administrateur par le biais du fichier batch ?

Environnement : Win7/Vista

Solution

Vous devrez peut-être utiliser d'abord un autre fichier batch pour lancer le second avec des droits d'administrateur.

Dans le premier, utilisez

runas /noprofile /user:mymachine\administrator yourbatchfile.bat

Après lecture, vous devez être capable de taper le mot de passe à l'invite. Vous ne pouvez pas taper le mot de passe car cette fonction a été verrouillée pour des raisons de sécurité.

Vous aurez peut-être plus de chance avec [psexec][1].

[1] : http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

Commentaires (3)

(Ceci est basé sur la réponse de @DarkXphenomenon's, qui présentait malheureusement quelques problèmes).

Vous devez enfermer votre code dans ce wrapper:

if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload
    echo %~nx0: running payload with parameters:
    echo %*
    echo ---------------------------------------------------
    cd /d %2
    shift
    shift
    rem put your code here
    rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof

Cela permet au fichier batch de s'exécuter en tant qu'utilisateur élevé. Il ajoute deux paramètres au code privilégié:

  • le mot payload, pour indiquer qu'il s'agit d'un appel payload, c'est à dire déjà élevé. Sinon Sinon, il ne ferait qu'ouvrir de nouveaux processus encore et encore.

  • Le chemin du répertoire où le script principal a été appelé. En raison du fait que Windows lance toujours toujours, Windows démarre un cmd.exe élevé dans "%windir%\system32&quot ;, il n&#8217y a pas de moyen facile de connaître le chemin le chemin d'origine (et de conserver la possibilité de copier votre script sans toucher au code). sans toucher au code)

Note: Malheureusement, pour une raison quelconque, shift ne fonctionne pas pour %*, donc si vous devez si vous devez passer des arguments réels, vous devrez utiliser la notation laide que j'ai utilisée dans l'exemple (%1 %2 %3 %4 %5 %6 %7 %8 %9), qui apporte également la limite de maximum de 9 arguments

Commentaires (0)

Vous pouvez utiliser un raccourci qui renvoie au fichier batch. Il suffit d'aller dans les propriétés du raccourci et de sélectionner avancé, puis "exécuter en tant qu'administrateur&quot ;.

Ensuite, il suffit de masquer le fichier batch et d'exécuter le raccourci.

De cette façon, vous pouvez même définir votre propre icône pour le raccourci.

Commentaires (3)