IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Exécution de commandes shell après appel à un fichier BAT


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Exécution de commandes shell après appel à un fichier BAT
    Bonjour,
    Je suis en train de créer une application afin d'installer automatiquement des imprimantes sur les agences de mon entreprise. Dans ce contexte, je crée un fichier bat (pour la création de l'imprimante avec les ports, marques, modèles et adresses ip correspondantes) à partir de deux fichiers txt. Jusqu'ici pas de soucis, la création se fait très bien et le script marche.
    Mon problème survient juste après: je dois en effet créer un package EXE pour pouvoir déployer plus facilement les imprimantes et ainsi éviter de transporter des scripts pour toutes les agences. Et c'est ici que je vois qu'en lançant mes commandes shell pour pouvoir créer le package que le script bat se lance tout seul après l'exécution de commandes n'ayant pas à voir avec lui . D'ailleurs les commandes fonctionnent bien et crééent le package (qui lui ne fonctionne pas aussi du coup).
    Partie où j'appelle les fonctions, avant ce ne sont que des conditions (nombres d'imprimantes tout ça tout ça)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub ...
     
     Else
                imprimante_1 = CBox_1.SelectedItem.ToString()
                adresseIp_1 = TB_ip1.Text
     
     
                ecritureFichier(agence, imprimante_1, adresseIp_1, dossier_1, fichierInf_1, driverImpri_1)
                MsgBox("fichier Bat créée")
                package(agence)
     
     
     
            End If
            End Sub

    Fonction d'écriture du Bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub ecritureFichier(ByVal agencia As String, ByVal imprimantia As String, ByVal ip_1 As String, ByVal dossier_1 As String, ByVal fichierInf_1 As String, ByVal driver_1 As String, Optional ByVal imprimantia_2 As String = "", Optional ByVal ip_2 As String = "", Optional ByVal dossier_2 As String = "", Optional ByVal fichierInf_2 As String = "", Optional ByVal driver_2 As String = "", Optional ByVal imprimantia_3 As String = "", Optional ByVal ip_3 As String = "", Optional ByVal dossier_3 As String = "", Optional ByVal fichierInf_3 As String = "", Optional ByVal driver_3 As String = "")
     
            Dim arg_fichier As String = agencia & "Imp"
            Dim fichier As New StreamWriter("C:\Users\frlecastel\Documents\Projet imprimante\" & arg_fichier & ".bat")
     
            fichier.WriteLine("@echo off")
            fichier.WriteLine("Set agence=" & agencia)
            fichier.WriteLine("Set imprimante=" & imprimantia)
            fichier.WriteLine()
            fichier.WriteLine("echo Installation des imprimantes")
            fichier.WriteLine("echo AGENCE :  %agence% - ")
            fichier.WriteLine()
            fichier.WriteLine("cd %CD%")
     
            fichier.WriteLine("echo Installation des imprimantes...")
            fichier.WriteLine("echo ""...""")
            fichier.WriteLine()
            fichier.WriteLine("echo Suppression des ports existants")
            fichier.WriteLine("rundll32 printui.dll,PrintUIEntry /dl /n" & agence & "NP01")
            fichier.WriteLine("%windir%\system32\cscript.exe ""portmgr.vbs"" -d -p IP_" & agence & "NP01")
            fichier.WriteLine()
            fichier.WriteLine()
            fichier.WriteLine("echo Installation des IP_PORTS")
            fichier.WriteLine("echo Veuillez patientez....")
            fichier.WriteLine("REGSVR32.EXE /S prnadmin.dll")
     
            fichier.WriteLine("echo Imprimante: " & imprimantia)
            fichier.WriteLine("%windir%\system32\cscript.exe ""portmgr.vbs"" -a -c """" -p IP_%agence%NP01 -h " & ip_1 & " -t raw -n 9100 -md")
            fichier.WriteLine("echo Veuillez patienter....")
            fichier.WriteLine("rundll32 printui.dll,PrintUIEntry /if /Y /b ""%agence%NP01"" /f ""%CD%\Drivers\" & dossier_1 & "\" & fichierInf_1 & """ /r " & Chr(34) & "IP_%agence%NP01" & Chr(34) & " /m """ & driver_1 & """ /z")
            fichier.WriteLine()
            fichier.WriteLine()
            fichier.WriteLine()
            fichier.WriteLine("echo Installation des imprimantes du site %agence% terminée.")
     
     
            fichier.Close()
            End Sub
    Et ma fonction d'appel aux commandes shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub package(ByVal agencia As String)
            Dim arg_fichier = agencia & "Imp"
     
            Shell("C:\Windows\System32\cmd.exe /K cpau -u user -p password -ex " & arg_fichier & ".bat -enc -file " & arg_fichier & ".job")
            Shell("C:\Windows\System32\cmd.exe /K cpau -dec -file " & arg_fichier & ".job -lwp")
            Shell("C:\Windows\System32\cmd.exe /K 7z a data.7z ./")
            Shell("C:\Windows\System32\cmd.exe /K copy /b 7zsd.sfx + config.txt + data.7z " & arg_fichier & ".exe")
     
        End Sub

    Voilà donc si quelqu'un peut m'expliquer pourquoi mon bat s'exécute tout seul alors que si je commente les commandes shell il n'y a pas de soucis je lui en saurai très reconnaissant .
    Merci à tous ceux qui peuvent m'apporter leur aide.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    je suis pas sûr de comprendre le problème.
    D'après ce que j'ai compris de cpau (ma source) :
    - sur ton premier appel tu crées un fichier "job crypté",
    - sur ton deuxième appel tu le lances.
    Du coup je comprends pas bien ton étonnement sur le fait que ta deuxième commande semble faire ce qu'elle est censée faire.

    Après je peux me tromper, je connaissais pas cpau y'a encore 5'.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Salut,
    D'abord merci de ta réponse. Ensuite oui je me suis aperçu de ça après coup ... C'est le problème de récupérer le travail de quelqu'un et qu'on t'explique pas ce que fait les commandes (basiquement on m'a dit tu tapes ça et ça marchera ><). Donc bref oui ça marche bien en enlevant cette ligne exact.
    Bon après mon package ne fonctionne finalement pas (il ne lance pas le bat) mais c'est un autre problème.
    Du coup, cas résolu (mais je te remercie encore )

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    De rien

    Pour ton autre souci on peut regarder ça.
    Je connais pas le principe des sfx de 7zip mais on doit pouvoir trouver les info qui vont bien.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2015
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Yes ,
    et bien en fait je viens de "régler" ça ce matin (j'arrive enfin à lancer le fichier bat dans le package mais il ne marche pas ...).
    Par contre je voulais savoir, est-ce que par hasard tu saurais comment retarder l'éxécution d'une commande shell (en ligne ou dans le VB). Je m'explique: le code, vu comme il est en haut, fait que l'archive se créée et se zip très bien. Mais le truc un peu con c'est que la commande d'après (donc la mise en package) se lance pendant que l'archive se construit ... Ce qui me laisse avec un package contenant une archive "non finie", ce qui est du coup assez inutile. Si tu aurais une technique secrète de Jedi à me proposer .

    Ps: j'y ai déjà pensé et pas de solution 'pause', ce n'est pas vraiment ce que je veux faire et je ne suis même pas sûr que ça marcherait (ouverture de 2 invités différents).

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    D'après cette fiche il semble que la fonction Shell puisse prendre plusieurs paramètres.
    Le troisième devrait permettre d'attendre la fin de la commande avant de rendre la main. A voir si ça règle ton souci.
    Plus je connais de langages, plus j'aime le C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Exécuter des commandes shell
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2008, 21h06
  2. [VBA]Exécuter une commande Shell
    Par antoine46 dans le forum VBA Access
    Réponses: 4
    Dernier message: 16/04/2008, 08h07
  3. Exécution de command shell et de fichiers .bat en C#
    Par jerome.fortias dans le forum C#
    Réponses: 6
    Dernier message: 05/09/2007, 14h14
  4. Réponses: 5
    Dernier message: 13/07/2007, 15h13
  5. expression régulière + excution de commande shell
    Par goanes dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2006, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo