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

VBScript Discussion :

VBS + lancement d'un programme sauf sur certain poste


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut VBS + lancement d'un programme sauf sur certain poste
    Bonjour,
    Je suis nouveau dans le forum et je viens de débuter avec VBscript. Je souhaiterais réaliser un script de démarrage où à la fin, il lance un programme pour tous les postes sauf sur certains. J'ai actuellement un script en DOS.

    @Echo ============= LANCEMENT DU PROG ==========
    IF %COMPUTERNAME%==POSTE-X goto endscript
    IF %COMPUTERNAME%==POSTE-Y goto endscript
    IF %COMPUTERNAME%==POSTE-Z goto endscript

    \\serveur\prog\lancement.exe

    :endscript

    Auriez-vous une idée de ce que cela peut donner en VBS?

    Merci par avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    En VBS ça donnerai ça :
    Code VBS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    set WshShell = CreateObject("wscript.Shell")
    set WshNetwork = CreateObject("wscript.network")
     
    strcomputer = WshNetwork.ComputerName
     
    if strcomputer <> "POSTE-X" and strcomputer <> "POSTE-Y" and strcomputer <> "POSTE-Z" then
    	WshShell.Run("\\serveur\prog\lancement.exe", , false) 'false pour spécifier de continuer le script sans attendre la fin du programme
    end if
    Si tu as plus de 3 postes à exclure le IF peut rapidement devenur lourd, il faudrait alors créer un array.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Tout d'abord merci pour ta réponse. Je souhaiterais effectivement mettre 15 postes. Comment dois je m'y prendre?

    Merci

  4. #4
    Membre régulier
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Points : 96
    Points
    96
    Par défaut
    Ouais justement c'est le truc auquel je pensais.
    L'idée de BlobbyBlob est bien et équivaut à ce que tu avais dans ton fichier de commandes, c'est-à-dire coder en dur dans le if mais imagine la taille du if sur 15 postes et si ça doit evoluer vers 30 ça deviendra une horreur (donc ne parlons même pas de centaines voir de milliers de postes).
    Ce qu'il faudrait c'est avoir une partie du code où tu saisie les noms des postes concernés puis que tu parcours ce tableau pour y comparer le nom du poste courant et la liste des postes concernés.

    Stocker les noms de machines dans une base de donnée ? (est-ce pertinent ?)
    Un dictionary ?
    Un tableau ?
    Ou même un fichier texte avec un nom de poste par ligne c'est facile à implémenter grace à la méthode ReadLine. Je me demande juste si c'est performant.
    Bref, faut trouver un compromis. ^^

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    est ce que je peux stocker ces postes dans un fichier txt par exemple et faire appel a ce ficher pour ignorer une commande?

  6. #6
    Membre régulier
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Points : 96
    Points
    96
    Par défaut
    En fait ce que j'avais en tête c'est un fichier texte avec un nom de poste par ligne. Pour le moment ce que j'ai fait c'est reprendre le script de BlobbyBlob pour te montrer ce que ça donne avec une array de 15 postes. Il faudra juste adapter les noms des postes.

    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
    39
    40
    41
    Option Explicit
    Dim WshShell, WshNetwork
    Dim strComputer
    Dim postesExclus(14)
    Dim i, shouldDo
     
    shouldDo = True
     
    postesExclus(0)    = "Janvier"
    postesExclus(1)    = "Fevrier"
    postesExclus(2)    = "Mars"
    postesExclus(3)    = "Avril"
    postesExclus(4)    = "Mai"
    postesExclus(5)    = "Juin"
    postesExclus(6)    = "Juillet"
    postesExclus(7)    = "Aout"
    postesExclus(8)    = "Septembre"
    postesExclus(9)    = "Octobre"
    postesExclus(10)    = "Novembre"
    postesExclus(11)    = "Decembre"
    postesExclus(12)    = "January"
    postesExclus(13)    = "February"
    postesExclus(14)    = "March"
     
    Set WshShell = CreateObject("WScript.Shell")
    Set WshNetwork = CreateObject("WScript.Network")
     
    strComputer = WshNetwork.ComputerName
     
    For i = 0 To Ubound(postesExclus)
        If LCase(strcomputer) = LCase(postesExclus(i)) Then
            shouldDo = False
            'MsgBox strComputer & " est répertorié comme exclus donc pas d'action"
            Exit For
        End If
    Next
     
    If shouldDo Then
        'MsgBox strComputer & " est concerné par l'action du script",, i
        WshShell.Run("\\serveur\prog\lancement.exe", , false) 'false pour spécifier de continuer le script sans attendre la fin du programme
    End If
    Maintenant avec un Fichier ce qu'il faudrait faire c'est recréer un autre objet pour accéder au fichier texte puis lire chaque ligne. Y'aurait quelques lignes en plus mais ça ressemblerait beaucoup.

    Ce qui est séduisant avec un fichier texte c'est que c'est éditable très facilement.
    Suffit de comprendre qu'il faut écrire un nom de poste par ligne mais je me demande si ça peut poser problème d'accès sur le fichier depuis les postes.

    Utiliser un tableau est plus monolithique mais ça marche pas plus mal.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réactivité mais surtout pour ce boulot. je test cette manip demain au travail.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    ça marche très bien.
    Merci

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Désolé de relancer cette discussion mais je souhaiterais par le biais du même script refaire une condition de lancement d'une autre application suivant les postes spécifiés comment dois-je m'y prendre?

    Lorsque je fais copié/collé ça ne marche pas...

    Voila ce que je voudrais faire:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    '-------------------------------------------------------------------------------
    'lancement de l'appli 1
    '-------------------------------------------------------------------------------
    Dim WshNetwork
    Dim strComputer
    Dim postesExclus(2)
    Dim i, shouldDo
    shouldDo = True
     
    postesExclus(0) = "poste-f"
    postesExclus(1) = "poste-g"
    postesExclus(2) = "poste-e"
     
     
    strComputer = WshNetwork.ComputerName
     
    For i = 0 To Ubound(postesExclus)
        If LCase(strcomputer) = LCase(postesExclus(i)) Then
            shouldDo = False
            Exit For
        End If
    Next
     
    If shouldDo Then
        WshShell.Run "\\monserveur\application1.exe", , false
    End If
    '-------------------------------------------------------------------------------
    'lancement de l'appli 2
    '-------------------------------------------------------------------------------
    Dim WshNetwork
    Dim strComputer
    Dim postesExclus(5)
    Dim i, shouldDo
    shouldDo = True
     
    postesExclus(0) = "poste-z"
    postesExclus(1) = "poste-t"
    postesExclus(2) = "poste-u"
    postesExclus(3) = "poste-r"
    postesExclus(4) = "poste-a"
    postesExclus(5) = "poste-c"
     
     
    strComputer = WshNetwork.ComputerName
     
    For i = 0 To Ubound(postesExclus)
        If LCase(strcomputer) = LCase(postesExclus(i)) Then
            shouldDo = False
            Exit For
        End If
    Next
     
    If shouldDo Then
        WshShell.Run "\\monserveur\application2.exe", , false
    End If
    Merci par avance

  10. #10
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Tout d'abord, je pense que tu as oublié de créer tes objets (si le code que tu as posté est complet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WshShell = CreateObject("WScript.Shell")
    Set WshNetwork = CreateObject("WScript.Network")
    --> à partir de là, ni la récupération du nom du poste, ni le lancement de l'appli ne peuvent fonctionner.

    Ensuite, je te propose une petite fonction qui te permettra de simplifier ton code tout en le rendant plus lisible (à mon sens) :
    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
    Function StrInArr(strIn, arrIn) 'Teste si la chaine strIn est présente dans arrIn
    	Dim strTmp, boolOut
    	boolOut = False
    	For Each strTmp In arrIn
    		If StrComp(strTmp, strIn, vbTextCompare) = 0 Then boolOut = True
    	Next
    	StrInArr = boolOut
    End Function
     
    Dim WshNetwork, WshShell
    Dim strComputer
    Dim postesExclus
     
    Set WshShell = CreateObject("WScript.Shell")
    Set WshNetwork = CreateObject("WScript.Network")
    strComputer = WshNetwork.ComputerName
     
    '-------------------------------------------------------------------------------
    'lancement de l'appli 1
    '-------------------------------------------------------------------------------
    postesExclus = Array("poste-f", "poste-g", "poste-e") ' liste des postes pour lesquels l'appli n'est pas lancée
    If NOT StrInArr(strComputer, postesExclus) Then WshShell.Run "\\monserveur\application1.exe", , false ' si le nom du pc n'est pas dans le tableau, lancement de l'appli
     
    '-------------------------------------------------------------------------------
    'lancement de l'appli 2 --> même procédé
    '-------------------------------------------------------------------------------
    postesExclus = Array("poste-z", "poste-t", "poste-u", "poste-r", "poste-a", "poste-c")
    If NOT StrInArr(strComputer, postesExclus) Then WshShell.Run "\\monserveur\application2.exe", , false
    Enfin, voici quelques pistes pour mettre tes noms de postes à exclure dans un fichier texte :
    - Ouverture du fichier texte (méthode OpenTextFile de l'objet FSO)
    - Lecture ligne par ligne du fichier (Méthode ReadLine de l'objet File)
    - Pour chaque ligne lue, on incrémente le tableau des postes à exclure (voir Redim Preserve pour le redimmensionnement du tableau)

    Bonne continuation.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Géniale!! ça marche!!
    Merci de ton aide pitchalov!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Je me suis permis de relancer ce sujet car j'aimerais modifier le script de façon à faire appel a un fichier TXT comme proposé par pitchalov. En effet, j'ai de plus en plus de postes et j'aimerais plus faire appel à ce fichier.

    Pourriez-vous m'aider?

    Merci

  13. #13
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Personne pour m'aider?

  14. #14
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Bonjour,

    Voici le principe pour obtenir ton tableau de postes à exclure depuis un fichier texte :
    1 - Lecture du fichier (mode ligne à ligne) : FAQ VBS - Comment lire le contenu d'un fichier texte ?
    2 - Pour chaque ligne du fichier, alimentation du tableau d'exclusion : Voir Redim Preserve dans la doc VBS.
    3 - Utilisation du tableau dans le script déjà à ta disposition.

    Montre-nous ton code afin qu'on t'apporte de l'aide si tu en as besoin.
    Bonne continuation.

  15. #15
    Membre éprouvé Avatar de cubitus91
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 726
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par genius2139 Voir le message
    Personne pour m'aider?
    Hello malgrés que pitchalov t'es donné des infos pour la réalisation de ton script. Je me suis permi de t'avancer un peu sur le sujet. Par contre, j'utilise un fichier xml. pour une relation PC/Program.
    J'ai fait ca rapidement, mais je pense que cela te fera une base.Voici ton fichier de reference xml :
    Code xml : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <programcomputer>
      <programs>
        <program id="1">
          <name>Program 1</name>
          <path>c:\Program1</path>
          <executable>program1.exe</executable>
        </program>
        <program id="2">
          <name>Program 2</name>
          <path>c:\Program2</path>
          <executable>program2.exe</executable>
        </program>
      </programs>
      <Computers>
        <computer>
          <name>PC1</name>
          <programid>1</programid>
        </computer>
        <computer>
          <name>PC2</name>
          <programid>2</programid>
        </computer>
      </Computers>
    </programcomputer>
    et le fichier vbs associé :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Explicit
    'Constantes
    Const XmlFileName = "ComputerProgram.xml"
    Private Sub Main()
    'local Var
    Dim strComputer,computer,Program
    strComputer = GetComputername
    If CheckFileExist Then 
     For Each computer In  QuerryXml("/programcomputer/Computers/computer[name='" & strComputer & "']/programid")
      WScript.Echo computer.text
      For Each Program In  QuerryXml("/programcomputer/programs/program[@id='" & computer.text & "']")
      WScript.Echo "L'ordinateur doit lancer ce programe:" & Program.selectSingleNode("name").text
      WScript.Echo "Le path de l'executable est le suivant: " & Program.selectSingleNode("path").text
      WScript.Echo "Le nom de l'executable est le suivant: " & Program.selectSingleNode("executable").text
      WScript.Echo "Donc on a: " & Program.selectSingleNode("path").text & "\" & Program.selectSingleNode("executable").text
     
      Next 
     Next
    End If 
    End Sub 
     
     
    Private Function QuerryXml(pstrQuery)
    'local var
    Dim ObjXMLDoc
    Set ObjXMLDoc = CreateObject("Microsoft.XMLDOM")
    ObjXMLDoc.Async = "false"
    ObjXMLDoc.Load(XmlFileName)
    Set QuerryXml = ObjXMLDoc.selectNodes(pstrQuery)
    Set ObjXMLDoc = Nothing
    End Function 
     
    Private Function GetComputername()
    'local var
    Dim ObjShell
    'Construct object
    Set ObjShell = WScript.CreateObject( "WScript.Shell" )
    GetComputername = ObjShell.ExpandEnvironmentStrings( "%COMPUTERNAME%" )
    'Destruct Object
    Set ObjShell = Nothing
    End Function 
    Private Function GetScriptDirectory()
    'local var
    Dim ObjShell
    Set ObjShell = CreateObject("WScript.shell") 
    GetScriptDirectory = ObjShell.CurrentDirectory 
    Set ObjShell = Nothing
    End Function 
    Private Function CheckFileExist()
    'local var
    Dim ObjFileSystemObject
    Set ObjFileSystemObject = CreateObject("Scripting.FileSystemObject")
    CheckFileExist = ObjFileSystemObject.FileExists(GetScriptDirectory & "\" & XmlFileName)
    Set ObjFileSystemObject = Nothing
    End Function
    Comme le but n'est pas forcement que l'on fasse vos scripts, je te laisse le comprendre, mais n'hésite pas à revenir vers les membres du forum pour de plus amples informations.
    Cordialement

  16. #16
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 76
    Points : 15
    Points
    15
    Par défaut
    Tout d'abord merci pour ta solution cubitus91.
    Dès que possible, j'essaierai ta solution pour te dire si cela fonctionne.

Discussions similaires

  1. Redirection au clique sauf sur certains éléments
    Par neo18045 dans le forum jQuery
    Réponses: 2
    Dernier message: 01/08/2013, 15h22
  2. [Graphics View] Scale de la vue sauf sur certains QGraphicsItem
    Par hush dans le forum Qt
    Réponses: 2
    Dernier message: 24/04/2011, 10h13
  3. Réponses: 14
    Dernier message: 27/05/2008, 10h06
  4. Bug programme Delphi sur certains XP
    Par Philippe85 dans le forum Delphi
    Réponses: 11
    Dernier message: 13/12/2006, 11h51

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