Batch : Ouvrir logiciels en tant qu'autre utilisateur.
Jin - 21 déc. 2023 à 14:18
- Batch : Ouvrir logiciels en tant qu'autre utilisateur.
- Fichier batch - Guide
- Extension batch - Forum Windows
- Batch net use - Forum Réseau
- Msgbox batch ✓ - Forum Autoit / batch
- Batch supprimer fichier - Forum Windows
2 réponses
15 nov. 2023 à 08:58
Bonjour,
Se souvenir avant tout que la commande RUNAS ne peut s'élever (en français qu'on ne peut pas utiliser un compte administrateur si on n'a pas ces droits).
On peut contourner en utilisant un utilitaire tiers (ShellRunas, Sysinternals).
Dans tous les cas, il faut une commande par logiciel à lancer (et une éventuelle temporisation entre chaque, c'est une autre question).
Il n'est pas possible à ma connaissance d'entrer le mot de passe dans une variable qui serait définie à la demande par SET /P puis utilisée dans la commande RUNAS, c'est une sécurité qui est délibérément incorporée à la commande.
Il faudrait donc que ce mot de passe soit lu à partir d'un fichier texte où il figure par une syntaxe du style
runas /user:localadmin "c:\users\localuser\desktop\control.exe" < password.txt
ce qui est absurde sauf si éventuellement le script détruit après utilisation le fichier en question, mais il n'y a alors pas de sens à en créer un.
Bonsoir, si j'ai bien compris,
Vous voulez ouvrir plusieurs logiciels en même temps en tant qu'un autre utilisateur en utilisant la fonction RunAs et en utilisant le codage batch ?
Alors au plus simple, une idée qui me vient.
Vous allez créer deux fichiers batch !
Dans dans un premier temps vous allez tout simplement créer un fichier batch qui ouvrira tous vos programmes (si besoin rajoutez des lignes ou supprimez en). De cette façon :
@echo off start "" "C:\Chemin\Vers\Programme1.exe" start "" "C:\Chemin\Vers\Programme2.exe" start "" "C:\Chemin\Vers\Programme3.exe" start "" "C:\Chemin\Vers\Programme4.exe" start "" "C:\Chemin\Vers\Programme5.exe" echo --------------------------------------- timeout /t 3 /nobreak >nul exit
Vous allez enregistrer ce fichier au format batch en lui donnant un nom, exemple multifruits.bat, où vous voulez, pour faire bien vous pouvez l'enregistrer sur le bureau de la session secrète.
Dans un second temps vous allez créer un fichier batch avec la fonction RunAs qui ouvrira ce fichier batch en tant qu'autre utilisateur ! ;)
J'ai retrouvé un vieux fichier batch que j'avais écrit il y'a un temps, oui je sais... J'aime bien faire dans l'usine à gaz, en batch, dès que je commence à écrire je n'arrive plus à m'arrêter. ^^'
Remplacez les deux lignes du début sans mettre de guillemets:
Programme et Utilisateur
@echo off set Programme=C:\Chemin\Vers\batch\multifruits.bat set Utilisateur=NomDeSession goto pass :open cls set /a tempo = 0 echo --------------------------------------- echo ----Bienvenue sur la fonction Runas---- echo --------------------------------------- timeout /t 3 /nobreak :prog cls echo --------------------------------------- echo Veuillez entrer le chemin d'acces au programme que vous souhaitez ouvrir echo Ou le raccourcis de commande d'execution: set Programme=null set /p Programme= if %tempo% geq 1 goto pass :user cls echo --------------------------------------- echo Veuillez entrer le nom d'utilisateur avec lequel vous souhaitez vous connecter: set Utilisateur=null set /p Utilisateur= :pass cls echo Pour ouvrir %Programme% echo Sur votre ordinateur en tant que %Utilisateur% runas /profile /user:%Utilisateur% "%Programme%" if %errorlevel% neq 0 goto :error echo --------------------------------------- echo Le programme c'est lancer correctement! echo --------------------------------------- timeout /t 3 /nobreak >nul goto eof :error echo --------------------------------------- echo ------Une erreur c'est produite !------ echo --------------------------------------- echo Voulez vous continuer ? (oui/non) set Rep=oui set /p Rep= if %Rep%==non goto end set error=------ set quitt=------ set /a tempo = 0 :erratum cls if %tempo%==3 goto bugg set /a tempo = tempo + 1 echo ----------------%error%---------------- echo Que voulez vous modifier ? echo ----------------%quitt%---------------- echo 1 Le programme saisie echo 2 L'utilisateur saisie echo 3 Le mot de passe echo 4 Tout set Chx=null set /p Chx= Votre choix : if %Chx%==0 goto end if %Chx%==1 goto prog if %Chx%==2 goto user if %Chx%==3 goto pass if %Chx%==4 goto open set error=erreur set quitt=0 Exit goto erratum :bugg cls echo -----------------oups!----------------- goto eof :end echo --------------------------------------- :eof echo ------------- A bientot ! ------------- echo --------------------------------------- timeout /t 3 /nobreak >nul exit
Vous n'avez plus qu'à l'enregistrer au format batch et le lancer au besoin. (ou bien sûr modifier votre ancien fichier batch ;)
Ps : C'est une version de code avec demande de mot de passe systématique !
Si vous souhaitez un raccourci avec la fonction RunAs pour accéder sans plus jamais avoir à rentrer de mot de passe (seulement une fois pour l'enregistrer) utilisez la commande /savecred
21 déc. 2023 à 07:49
Bonjour,
Notons tout d'abord que l'auteur n'est pas revenu depuis plus d'un mois: nous parlons sans doute dans le vide.
Pour autant, ton batch me semble contestable.
J'ai tout d'abord un doute que la commande Runas appliquée à un batch ne change pas que l'utilisateur de l'interpréteur de commandes, pas celui des exécutables qui y sont appelés: pourquoi ne pas se contenter d'écrire autant de sentences Runas que d'exécutables à lancer?
J'émets aussi bien sûr des réserves sur l'éventuelle sauvegarde d'un mot de passe; mais le commutateur /savecred reproduit le nom d'utilisateur précédent, par construction, la commande Runas va toujours prompter pour le mot de passe.
Pourquoi vouloir itérer 3 fois sur la demande des identifiants, ne suffit-il pas d'un Choice ou Set /p qui laisseront entrer les identifiants autant que l'on veut avec le choix recommencer-sortir?
Enfin, pourquoi définir en tête de gondole le programme et l'utilisateur en même temps que l'on va dans la suite du script demander à l'utilisateur de les préciser?
Modifié le 21 déc. 2023 à 14:46
Bonjour @brucine et @zekey_0764
La fonction /savecred fonctionne parfaitement (même avec un deuxième fichier batch contenant les liens à ouvrir avec "Start") ! Normalement il n'est plus nécessaire de rentrer de mot de passe, elle est enregistrée.
/Savecred enregistre l'authentification de la session avec lequel on veut ouvrir, il n'est plus nécessaire de rentrer un mot de passe.
Pour ce qui est du code batch que je propose, vous avez raison 99 % du code est inutile, moins de 5 lignes de codes suffit ! Laissez-moi reformuler en y intégrant /savecred (Remplacez les deux lignes du début sans mettre de guillemets:
Programme et Utilisateur)
@echo off set Programme=C:\Chemin\Vers\batch\multifruits.bat set Utilisateur=NomDeSession runas /savecred /user:%Utilisateur% "%Programme%" exit
Bien sûr il peut y avoir encore bien d'autres façons de faire !! Mais Au plus simple (avec uniquement le langage batch), je suis parti sur la première idée qui est de créer deux fichiers batch ! L'un contenant les liens avec la fonction 'Start', et l'autre contenant la fonction 'RunAs' ! ( créer un fichier batch avec simplement la fonction "Start" qui ouvrirait une dizaine de liens. Et un fichier batch 'RunAs' pour simplement ouvrir tous ces liens avec une simple identification de la session spécifique.)
Bien sûr on peut aussi écrire une par une toutes les sentences 'RunAs' en un fichier batch. Même si je trouve cela un peu plus fastidieux ! ;) surtout si il y a beaucoup de liens.
La fonction /savecred il faut l'enlever si vous souhaitez rentrer un mot de passe unique à chaque fois pour lancer tous les programmes contenu dans le deuxième fichier batch! Sinon la session et le mot de passe seront enregistrés ! ;)
Ps : Si il y a beaucoup de liens dans le fichier batch contenant tous les liens à ouvrir simultanément, on peut mettre une petite temporisation entre chaque lien à ouvrir, si l'ordi peine... ! J'ai fait exprès de rajouter la commande temporisateur ' timeout /t 3 /nobreak >nul ' dans le code contenant les liens, il suffit de le rajouter entre chaque liens en modifiant aux besoins la valeur /t
21 déc. 2023 à 11:08
Salut Jin, merci pour le temps que tu as consacré à créer ses lignes. Je vais tester ça. !
Je n’est pas répondu à Brucine car j’avais le sentiment qu’il n’avait pas bien compris la demande initial.
21 déc. 2023 à 11:29
Bonjour,
Si tel est le cas, rien n'interdit de revenir demander des précisions...
Je ne vois pas trop l'intérêt du double batch tel qu'il est préconisé, un seul suffit, mais à chacun son plaisir.
Je ferais comme je l'ai exposé autant de lignes Runas que de programmes à lancer (en temporisant par timeout ou ce qu'on veut s'il est nécessaire qu'un soit bien lancé avant le suivant), et Runas se substituant à Start, mais il est probable comme dit aussi que Runas enregistre le nom d'utilisateur mais continue à demander le mot de passe à chaque exécution: c'est pour ça que la seule solution consiste alors comme suggéré en <1> à le lire à partir d'un fichier texte, mais ce n'est pas très sécurisant.