[R] Exécuter une ligne de commande dans un AutoIt
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
Lebalbo2013
- 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
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
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]
Raison : Modification du titre [..] -> [R]
- franco
- 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
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
Vu que ta ligne de commande est un poil longue, mets la dans une variable (exemple : $command = 'ma "commande" dos'
Et ensuite, fais un
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.
++
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
Personnellement : utilise RunWait à la place de Run.To run DOS (console) commands, try; don't forget " " before "/c"Code : Tout sélectionner
Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)
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)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

- Messages : 63
- Enregistré le : ven. 19 déc. 2014 18:11
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
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
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
- franco
- 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
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.
++
++
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

- Messages : 63
- Enregistré le : ven. 19 déc. 2014 18:11
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
Merci pour toutes ces infos.J'ayyends ton retour.
Lebalbo
Lebalbo
- franco
- 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
Salut.
Je reviens pour te donner des nouvelles : elles sont bonnes.
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.
Je t'explique comment j'ai procédé
Tu devrais peut-être, si tu veux VRAIMENT rayer IE (^^), détecter la version de IE et ainsi faire une condition du type :
Pour détecter la version d'IE : https://www.autoitscript.com/forum/topi ... e-version/
++
Je reviens pour te donner des nouvelles : elles sont bonnes.
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.")- 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.
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.")++
L'entraide, c'est mon dada 
-
Lebalbo2013
- 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
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
Bon début de semaine.
Lebalbo
-
Lebalbo2013
- 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
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?
- franco
- 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
Salut.
Avant IE11, tu avais quelle version d'IE ?
Car :
le script fonctionne chez moi, alors pourquoi il ne fonctionnerait pas.
++
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

- Messages : 63
- Enregistré le : ven. 19 déc. 2014 18:11
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
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

- Messages : 63
- Enregistré le : ven. 19 déc. 2014 18:11
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
Ci-dessous le script AutoIt que j'ai compilé:
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.
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]Re: [..] Exécuter une ligne de commande dans un AutoIt
Le plus simple serait quand même de se passer de la commande externe et d'utiliser les fonctions AutoIt :
- _FileListToArray
- Boucle for
- RunWait
- _FileListToArray
- Boucle for
- RunWait
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
-
Lebalbo2013
- 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
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.
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
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
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
-
Lebalbo2013
- 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
@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..
,du coup je me retrouve encore bloquer.
J'aurais bien pu me servir du batch mais en utilisant SCCM 2007,le script ne s'installe pas..
-
Utilisateur 3309 supprimé
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
tu as un reseau avec domaine et active Directory?
-
Lebalbo2013
- 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
Oui c'est le cas.
-
Utilisateur 3309 supprimé
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
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.

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é.
normalement dans l'AD on peut associer a chaque utilisateur l'exécution d'un script de démarrage.

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

- Messages : 63
- Enregistré le : ven. 19 déc. 2014 18:11
- Status : Hors ligne
Re: [..] Exécuter une ligne de commande dans un AutoIt
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
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
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
puis exécute un psexec sur la liste des machines:
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
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.exeFOR /L %i in (10,1,120) DO psexec \\192.168.0.%i -s wuauclt.exe /detectnow
idem exemple 2 mais pour vista/Seven/8psexec \\PC1 -accepteula -u domaine\administrateur -p password -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.txtpsexec -accepteula -e -h -u domaine\administrateur -p password \\PC1 -i cmd /c start \\serveur\dossier\fichier.exe
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

