Page 1 sur 2

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

Posté : ven. 21 août 2015 11:56
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

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

Posté : ven. 21 août 2015 14:36
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. :)

++

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

Posté : ven. 21 août 2015 15:05
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

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

Posté : ven. 21 août 2015 15:50
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.



++


++

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

Posté : ven. 21 août 2015 16:03
par Lebalbo2013
Merci pour toutes ces infos.J'ayyends ton retour.
Lebalbo

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

Posté : ven. 21 août 2015 18:29
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/


++

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

Posté : lun. 24 août 2015 10:47
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

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

Posté : lun. 24 août 2015 11:47
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?

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

Posté : lun. 24 août 2015 11:54
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.


++

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

Posté : lun. 24 août 2015 12:03
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.

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

Posté : lun. 24 août 2015 12:54
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.

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

Posté : lun. 24 août 2015 14:42
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

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

Posté : mar. 25 août 2015 10:15
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.

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

Posté : mar. 25 août 2015 10:35
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:

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

Posté : mar. 25 août 2015 10:51
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.

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

Posté : mar. 25 août 2015 11:47
par Utilisateur 3309 supprimé
tu as un reseau avec domaine et active Directory?

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

Posté : mar. 25 août 2015 12:35
par Lebalbo2013
Oui c'est le cas.

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

Posté : mar. 25 août 2015 18:03
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é.

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

Posté : mer. 26 août 2015 11:08
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

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

Posté : jeu. 27 août 2015 08:31
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