[R] Exécuter une ligne de commande dans un AutoIt

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

[R] Exécuter une ligne de commande dans un AutoIt

#1

Message par Lebalbo2013 »

Bonjour à tous,
J'aimerais obtenir de l'aide afin de créer un AutoIt exécutant la ligne de commande suivante:
cmd /c FORFILES /P %WINDIR%\servicing\Packages /M *11.*.mum /C "cmd /c echo @fname && start /w pkgmgr /up:@fname /quiet /norestart"
IL s'agit du script de désinstallation d'Internet Explorer 11.il fonctionne bien via l'invite de commandes (en mode administrateur) mais je ne sais coent l'intégrer dans un AutoIt en vue d'un déploiement multi-postes et multi-sites.
Merci d'avance pour votre aide.
Cdlt,
Lebalbo
Modifié en dernier par jguinch le jeu. 27 août 2015 15:27, modifié 1 fois.
Raison : Modification du titre [..] -> [R]
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#2

Message par franco »

Salut.

Je pense qu'il faut que tu utilises la commande Run et que tu lises l'aide associée.
https://www.autoitscript.com/autoit3/do ... ns/Run.htm
To run DOS (console) commands, try

Code : Tout sélectionner

Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)
; don't forget " " before "/c"
Personnellement : utilise RunWait à la place de Run.

Vu que ta ligne de commande est un poil longue, mets la dans une variable (exemple : $command = 'ma "commande" dos'

Et ensuite, fais un

Code : Tout sélectionner

RunWait(@ComSpec & " /c " & $command, "", @SW_HIDE)
Tu peux remplacer @SW_HIDE par @SW_SHOW pour voir la fenêtre CMD et ainsi savoir si ta commande se passe comme il se doit.


PS : en espérant que tu n'utilises pas (ou d'autres utilisateurs/trices) des logiciels / programmes ayant besoin d'internet explorer.

Comme Skype par exemple. :)

++
L'entraide, c'est mon dada ;)
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#3

Message par Lebalbo2013 »

Merci pour ta réponse.Ma question n'est peur-être pas futée mais bon..MA commande débute par cmd /c;en utilisant run dans mon autoIt dois je le supprimer pour avoir quelque chose du genre: Run(@ComSpec & " /c " & ' FORFILES /P %WINDIR%\servicing\Packages /M *11.*.mum /C "cmd /c echo @fname && start /w pkgmgr /up:@fname /quiet /norestart" ', "", @SW_HIDE)

Ou alors je conserve cet argument et obtenir cette commande:
Run(@ComSpec & " /c " & 'cmd /c FORFILES /P %WINDIR%\servicing\Packages /M *11.*.mum /C "cmd /c echo @fname && start /w pkgmgr /up:@fname /quiet /norestart" ', "", @SW_HIDE)
Quelle serait la bonne ligne de commande selon toi?Dans un premier temps je ne l'utiliserai pas runwait.

Merci d'avance
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#4

Message par franco »

Salut.

Ta commande commence par cmd /c


Or => http://blogs.msdn.com/b/askie/archive/2 ... lorer.aspx

cmd /c au début n'a pas d'importance, vu que cela utilise déjà l'invite de commande.


Je vais essayer de compiler et voir (sous VM, car je garde IE sur mes pc réels).


Je reviens et te dis si ça fonctionne.


PS : Si je t'ai parlé de la commande RunWait, c'est pour une bonne raison.

Je ne sais pas si tu fais du batch, mais RunWait fonctionne comme la commande CALL en batch.

Il attend que la ligne de code soit exécutée et terminée avant de passer à la suite.

Avec run, il exécute le code et n'attend pas qu'il ait fini son boulot, il continue à exécuter le reste.



++


++
L'entraide, c'est mon dada ;)
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#5

Message par Lebalbo2013 »

Merci pour toutes ces infos.J'ayyends ton retour.
Lebalbo
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#6

Message par franco »

Salut.

Je reviens pour te donner des nouvelles : elles sont bonnes. :mrgreen:

En effet, la ligne de commande suffit ^^
Et comme la ligne de la commande est un peu longue, pour éviter une erreur de syntaxe qui peut planter le PC (surtout pour les lignes de commande DOS - j'en ai déjà fait les frais), je l'ai placé dans une variable.

Code : Tout sélectionner

; commande pour désinstaller IE11 => FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart
; commande pour désinstaller IE10 => FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*10.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart
; commande pour désinstaller IE9  => FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*9.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart

#RequireAdmin
$command = 'FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart'
RunWait(@ComSpec & " /c " & $command, "", @SW_SHOW)
MsgBox(0, "", "Désinstallation d'IE11 Finie."&@crlf&@crlf&"Vous vous retrouvez avec la version précédente d'IE.")
Je t'explique comment j'ai procédé
  • Ma VM avait IE8.
  • J'ai donc installé IE11 pour que je puisse tester la désinstallation.
  • J'ai mis RunWait (comme je te l'ai expliqué) mais avec la macro @SW_SHOW pour voir le contenu de l'invite de commande en temps réel : j'ai constaté que la désinstallation se déroulait sans souci (j'ai la même chose que cette IMAGE.
  • IE11 est toujours opérationnel : il faut un redémarrage pour que les modifications soient pris en compte : chose que tu peux faire en autoit, juste après ton RunWait (cf la commande Shutdown
  • Après redémarrage, j'ai de nouveau IE8.
Ce qui veut dire que : si on désinstalle IE, on revient à la version précédente.


Tu devrais peut-être, si tu veux VRAIMENT rayer IE (^^), détecter la version de IE et ainsi faire une condition du type :

Code : Tout sélectionner

If $IE_version = "IE11" then $command = 'FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart'
If $IE_version = "IE10" then $command = 'FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*10.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart'
IF .... etc... then ... etc...
RunWait(@ComSpec & " /c " & $command, "", @SW_SHOW)
MsgBox(0, "", "Désinstallation d'IE11 Finie."&@crlf&@crlf&"Vous vous retrouvez avec la version précédente d'IE.")
Pour détecter la version d'IE : https://www.autoitscript.com/forum/topi ... e-version/


++
L'entraide, c'est mon dada ;)
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#7

Message par Lebalbo2013 »

Merci beaucoup pour ton aide et pour toutes tes explications.Je réeffectue les tests puis je reviens vers toi.
Bon début de semaine.
Lebalbo
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#8

Message par Lebalbo2013 »

Je viens d'effectuer un test.Le script s'exécute sans erreur,mais lorsque je clic sur ok sur le MSgBox et que je redémarre mon poste,j'ai toujours mon IE11 installée.Combien de temps dois-je attendre avant de redémarrer mon poste?
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#9

Message par franco »

Salut.

Avant IE11, tu avais quelle version d'IE ?

Car :
Ce qui veut dire que : si on désinstalle IE, on revient à la version précédente.

le script fonctionne chez moi, alors pourquoi il ne fonctionnerait pas.


++
L'entraide, c'est mon dada ;)
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#10

Message par Lebalbo2013 »

J'avais IE8.Lorsque j'exécute le script de désinstall j'ai toujours IE11 et pas IE8.Je me connecte sur ma machine de test puis j'exécute de nouveau le script.Je reviens vers toi.
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#11

Message par Lebalbo2013 »

Ci-dessous le script AutoIt que j'ai compilé:

Code : Tout sélectionner

[b]#RequireAdmin
$command = 'FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart'
RunWait(@ComSpec & " /c " & $command, "", @SW_SHOW)
MsgBox(0, "", "Désinstallation d'IE11 Finie."&@crlf&@crlf&"Vous vous retrouvez avec la version précédente d'IE.")[/b]
J'ai ensuite effectué un clic droit sur l'exe obtenu puis "exécuter en tant qu'administrateur".Malheureusement je ne sais pas comment faire pour joindre un fichier image afin que tu puisse la capture d'écran que j'ai faite du déroulement de l'installation;Mais toujours est-il que je n'enregistre aucun message d'erreur mais que la désinstallation ne s'effectue pas.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#12

Message par jguinch »

Le plus simple serait quand même de se passer de la commande externe et d'utiliser les fonctions AutoIt :
- _FileListToArray
- Boucle for
- RunWait
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#13

Message par Lebalbo2013 »

Bonjour,
Pour être honnête je ne sais pas comment me servir des fonctions AutoIt que vous avez citées pour désinstaller IE11 mais je suis partant pour apprendre,je pensais plutôt que le plus simple serait de se servir de cette commande externe et de l'exécuter dans un script AutoIT.Je ne sais pas pourquoi pourquoi le script que m'a proposé Franco ne fonctionne pas chez moi.
Je suis ouvert à toute proposition.
@Franco je vais de nouveau faire un test ce matin en exécutant en tant qu'utilisateur cette fois.
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#14

Message par Utilisateur 3309 supprimé »

Bonjour,
excusez moi, mais je n'arrive pas a comprendre l'intéret "d'encapsuler" cette commande Batch dans un autoit ?
pourquoi ne pas rester en batch ??
La seule chose qu'on ne peut pas faire en batch ici c'est le msgbox...donc au pire, autant compiler un msgbox qu'on met en fin de script batch...ce sera bien plus simple :lol:
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#15

Message par Lebalbo2013 »

@Franco je viens d'effectuer de nouveau le test et c'est pareil mais en batch la commande fonctionne.Ce que je constate c'est qu'en batch la désinstallation est plus lente.Alors qu'avec le script AutoIt c'est vraiment rapide au niveaude l'invite de commandes.On dirait qu'il ne se passe pas grand chose.
J'aurais bien pu me servir du batch mais en utilisant SCCM 2007,le script ne s'installe pas.. :oops: ,du coup je me retrouve encore bloquer.
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#16

Message par Utilisateur 3309 supprimé »

tu as un reseau avec domaine et active Directory?
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#17

Message par Lebalbo2013 »

Oui c'est le cas.
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#18

Message par Utilisateur 3309 supprimé »

et intégrer le batch dans le \\serveur\NETLOGON ne ferait pas l'affaire ?
normalement dans l'AD on peut associer a chaque utilisateur l'exécution d'un script de démarrage.
Image

il y a aussi d'autres méthodes quand on est dans un domaine...avec les GPO.

Avec psexec (de la suite PStools) tu peux exécuter ton script depuis ton PC, sur les machines distantes. on peut par exemple imaginer une boucle qui récupère toutes les IP actives de ton réseau et ensuite une boucle qui exécute le script en administrateur sur toutes ces machines.
J'ai fait un truc similaire qui me permet en cas d'incendie d'exécuter un programme qui affiche une alerte sur tous les PC de ma société.
Lebalbo2013
Niveau 4
Niveau 4
Messages : 63
Enregistré le : ven. 19 déc. 2014 18:11
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#19

Message par Lebalbo2013 »

Bonjour,
Celà pourrait effectivement faire l'affaire(je parle de l'utilisateion de psexec) mais je ne sais pas comment m'y prendre.Auriez-vous des liens à me proposer ou alors un process à suivre?
Cordialement,
Lebalbo
Utilisateur 3309 supprimé
Status : Hors ligne

Re: [..] Exécuter une ligne de commande dans un AutoIt

#20

Message par Utilisateur 3309 supprimé »

Bonjour,
voici quelques exemples de Batchs que j'utilise:

Exemple 1: exécuter un wuauclt.exe /detectnow sur toutes les ip de 192.168.0.10 à 192.168.0.120
FOR /L %i in (10,1,120) DO psexec \\192.168.0.%i -s wuauclt.exe /detectnow
Exemple 2 : Exécuter sur une machine distante sur WIN XP nomée PC1 en tant qu'administrateur du domaine le fichier qui se trouve sur \\serveur\dossier\fichier.exe
psexec \\PC1 -accepteula -u domaine\administrateur -p password -i cmd /c start \\serveur\dossier\fichier.exe
idem exemple 2 mais pour vista/Seven/8
psexec -accepteula -e -h -u domaine\administrateur -p password \\PC1 -i cmd /c start \\serveur\dossier\fichier.exe
Exemple 3: Batch qui récupère la liste des PC online sur le réseau, enregistre cette liste dans le fichier c:\liste.txt
puis exécute un psexec sur la liste des machines:
@echo off
c:
cd \
FOR /F "skip=3 delims=\ " %%A IN ('NET VIEW') DO ECHO.%%A >> c:\liste.txt

c:\pstools\psexec @liste.txt -accepteula -u domaine\administrateur -p password -i cmd /c start \\serveur\dossier\fichier.exe
Répondre