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 - Installation imprimante en fonction des O.U users


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 - Installation imprimante en fonction des O.U users
    Bonjour,

    Je souhaiterais créer un script VBS qui m'installe automatiquement une imprimante réseau sur un profil utilisateur en fonction de la SOUS O.U service.

    Actuellement nous avons deux photocopieurs par étage. Les utilisateurs sont classés par groupe de département dans l'AD.

    Pourriez-vous m'aider à ce sujet?
    Voici ce que j'ai créé mais il ne me détecte pas le service, il m'installe tout le temps l'imprimante.

    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
    ON ERROR RESUME NEXT
    'définition de la variable serveur de domaine 
    Dim serveurclient
    serveurclient = "domain.com"
    set WshShell = CreateObject("WScript.Shell") 
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    DomainName=WshShell.ExpandEnvironmentStrings("%USERDOMAIN%") 
    Set UserObj = GetObject("WinNT://" & DomainName & "/" & WshNetwork.username)
    'Init Groups 
    Dim UserGroups 
    Dim GroupObj 
    UserGroups="" 
    For Each GroupObj In UserObj.Groups
    UserGroups=UserGroups & "[" & GroupObj.Name & "]"
    Next 
    if InGroup ("Informatique") then 
    Set objPrinter= CreateObject("Wscript.Network") 
    objPrinter.AddWindowsPrinterConnection "\\serveur\prt03"
    objPrinter.SetDefaultPrinter "\\serveur\prt03"
    end if
    Merci par avance.

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

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

    Juste pour conseil, quand on veut faire du debug sur un VBScript, ou comprendre là où ça bloque, on enlève le Sinon l'interpréteur ne t'indique pas où est le problème.
    --> La fonction InGroup n'existe pas en VBS.

    Voulais-tu faire ce test peut-être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, UserGroups, "[Informatique]", vbTextCompare) Then
    En lisant ton code, j'ai l'impression que tu ne comprends pas ce que tu codes :
    - première variable déclarée "serveurclient" non utilisée, mais avec un commentaire qui l'explique
    - 2 différents objets "Wscript.Network" déclarés : "WshNetwork" et "objPrinter", et même pas de la même manière
    - création de la chaine "UserGroups" contenant tous les groupes de ton user, sauf qu'elle n'est pas utilisée dans ton test

    ... ça commence à faire pas mal de chose, peut-être faudrait-il que tu commences sérieusement par La FAQ VBScript?

    Bonne continuation

  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
    Je suis désolé j'ai trouvé ce script sur internet. Etant débutant dans ce domaine j'ai uniquement modifié les lignes concernant mon infrastructure.
    J'avais déjà fais un script de ce genre mais en fonction des O.U ordinateurs. Croyez-vous que je peux reprendre ce script? Si oui quelles sont les modifications à apporter?
    Merci par avance

    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
     
    '==============================================================================
    '                             Gestion des imprimantes
    '==============================================================================
    ' Récupération du nom du poste
    Dim WshNetwork, objNetwork, NomPoste, objConnection, objCommand, objRecordSet, Enreg_AD, Dcoupe
    Set WshNetwork = CreateObject("WScript.Network")
    Set objNetwork = CreateObject("WScript.Network")
    set WSHShell = CreateObject("WScript.Shell")
    NomPoste = WshNetwork.ComputerName
    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
     
    'Localisation du poste dans l'AD
    objCommand.CommandText = "SELECT ADsPath FROM 'LDAP://OU=domaine,dc=xxx' WHERE objectCategory='computer' AND name='" & NomPoste & "'"
    Set objRecordSet = objCommand.Execute
     
    'Récupération de la sous-OU du poste
    Enreg_AD=objRecordSet.Fields("ADsPath").Value
    Dcoupe=split("" & Enreg_AD & "",",")
    NomSou=mid(Dcoupe(1),4)
     
    'Suppression de toutes les imprimantes réseaux
    Set Printers = WshNetwork.EnumPrinterConnections
    For i = 0 to Printers.Count - 1 Step 2
        If Left(ucase(Printers.Item(i+1)),2) = "\\" Then
            WSHNetwork.RemovePrinterConnection Printers.Item(i+1)
        End IF
    Next
    '===============================================================================
    'COMMUN
    '===============================================================================
    objNetwork.AddWindowsPrinterConnection "\\serveur\PDFCreator"
    '===============================================================================
    'BUREAU 603
    '===============================================================================
    if NomSou = "BUREAU_603" then
    objNetwork.AddWindowsPrinterConnection "\\serveur\xerox7545"
    objNetwork.AddWindowsPrinterConnection "\\serveur\SPMX3100"
    objNetwork.AddWindowsPrinterConnection "\\serveur\HP3500"
    end if

  4. #4
    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
    Bonjour,

    J'essais d'avancer sur mon script , je suis un peu perdu!

    Merci de votre aide

    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
    Option Explicit 
     
    Dim objNetwork, objUser, strGroup, WshNetwork 
    Dim WScript, net 
    Dim currentuser 
    Dim Network 
     
    Set objNetwork = CreateObject("WScript.Network") 
    'On Error Resume Next 
    Set objUser = CreateObject("ADSystemInfo") 
    Set currentuser = GetObject("LDAP://" & objUser.UserName) 
    strGroup = LCase(Join(currentuser.MemberOf)) 
     
    If isMemberOf("Informatique") Then 
    net.AddWindowsPrinterConnection "\\serveur\prt03"
    net.SetDefaultPrinter "\\serveur\PRT03" 
    End If 
     
    Function isMemberOf(group) 
    Dim user, found, temp 
    found = False 
    Set user = GetObject("LDAP://dc=xxx 'WHERE objectCategory='user' AND sAMAccountName='" & strUser &"") 
    For Each temp In user.Groups 
    If UCase(temp.Name) = UCase(group) Then 
    found = True 
    Exit For 
    End If 
    Next 
    isMemberOf = found 
    End Function

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Bonjour,

    J'ai moi-même dû créer une fonction qui interroge l'AD (avec l'aide des imminents développeurs ici présent.)

    Regarde si cela peut t'aider :
    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
    Function IsMember(sGroup)
    Dim sAdsPath,oUser,oGroup,g_oGroupDict,g_oNet 
      'Peupler dictionnaire si pas encore créé
      If IsEmpty(g_oGroupDict) Then
          Set g_oGroupDict=CreateObject("Scripting.Dictionary")
          g_oGroupDict.CompareMode = vbTextCompare
          sAdsPath = DomainName &"/"& UserName
          Set oUser = GetObject("WinNT://"& sAdsPath & ",user")
          	For Each oGroup In oUser.Groups
            g_oGroupDict.Add oGroup.Name, "-"
          	Next
          Set oUser = Nothing
      End If
    IsMember = CBool(g_oGroupDict.Exists(sGroup))
    End Function
    Pour l'utiliser, elle sort un Booléen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (IsMember("TonGroupe")=True) Then
    Bonne chance,
    Si la réponse vous a été donnée, pensez au Tag .
    Un petit aide à se sentir utile. Merci.

    "La folie. C'est de faire et refaire la même chose en espérant que le résultat sera différent."
    Albert Einstein

  6. #6
    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
    Citation Envoyé par Miistik Voir le message
    Bonjour,

    J'ai moi-même dû créer une fonction qui interroge l'AD (avec l'aide des imminents développeurs ici présent.)

    Regarde si cela peut t'aider :
    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
    Function IsMember(sGroup)
    Dim sAdsPath,oUser,oGroup,g_oGroupDict,g_oNet 
      'Peupler dictionnaire si pas encore créé
      If IsEmpty(g_oGroupDict) Then
          Set g_oGroupDict=CreateObject("Scripting.Dictionary")
          g_oGroupDict.CompareMode = vbTextCompare
          sAdsPath = DomainName &"/"& UserName
          Set oUser = GetObject("WinNT://"& sAdsPath & ",user")
          	For Each oGroup In oUser.Groups
            g_oGroupDict.Add oGroup.Name, "-"
          	Next
          Set oUser = Nothing
      End If
    IsMember = CBool(g_oGroupDict.Exists(sGroup))
    End Function
    Pour l'utiliser, elle sort un Booléen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (IsMember("TonGroupe")=True) Then
    Bonne chance,
    Tout d'abord merci pour cette aide.
    Voici mon fichier vbs
    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
    Function IsMember(sGroup)
    Dim sAdsPath,oUser,oGroup,g_oGroupDict,g_oNet 
      'Peupler dictionnaire si pas encore cree
      If IsEmpty(g_oGroupDict) Then
          Set g_oGroupDict=CreateObject("Scripting.Dictionary")
          g_oGroupDict.CompareMode = vbTextCompare
          sAdsPath = DomainName &"/"& UserName
    	  Set oUser = GetObject("WinNT://"& sAdsPath & ",User")
          	For Each oGroup In oUser.Groups
            g_oGroupDict.Add oGroup.Name, "-"
          	Next
          Set oUser = Nothing
      End If
    IsMember = CBool(g_oGroupDict.Exists(sGroup))
    End Function
     
    If (IsMember("Informatique")=True) Then
    Set objPrinter= CreateObject("Wscript.Network") 
    objPrinter.AddWindowsPrinterConnection "\\serveur\prt03"
    objPrinter.SetDefaultPrinter "\\serveur\prt03"
    end if
    J'obtien une erreur à la ligne ("Set oUser = GetObject....").

    Merci

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Si tu as garder mon code tel quel c'est normal.
    Tu n'as pas la même infra.
    Essaies avec ton GetObject de ton code précédent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetObject("LDAP://dc=xxx 'WHERE objectCategory='user' AND sAMAccountName='" & strUser &"")
    Cette variable strUser n'a pas de valeur dans ton code (du moins dans celui que tu as posté).
    Si tu l'utilises dans un autre morceau de code, okay sinon tu auras une autre erreur.
    Si la réponse vous a été donnée, pensez au Tag .
    Un petit aide à se sentir utile. Merci.

    "La folie. C'est de faire et refaire la même chose en espérant que le résultat sera différent."
    Albert Einstein

  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
    Citation Envoyé par Miistik Voir le message
    Si tu as garder mon code tel quel c'est normal.
    Tu n'as pas la même infra.
    Essaies avec ton GetObject de ton code précédent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetObject("LDAP://dc=xxx 'WHERE objectCategory='user' AND sAMAccountName='" & strUser &"")
    Cette variable strUser n'a pas de valeur dans ton code (du moins dans celui que tu as posté).
    Si tu l'utilises dans un autre morceau de code, okay sinon tu auras une autre erreur.
    Merci mais j'obtiens toujours l'erreur. J'ai une grosse précision à apporter. mes users sont dans une sous O.U. Voici l'arbre de mon AD:
    Active directory-->domain.com-->OU1-->sous OU1-->sous OU2-->OU service-->user

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

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

    Où en es-tu dans l'avancement de ton script?
    Peux-tu poster le code (en entier) sur lequel tu travailles actuellement?
    Et nous dire :
    - si tu as des erreurs : où elles se situent, leur description, dans quel cas tu les rencontres?
    - si le code ne se comporte pas comme tu le souhaites : quel est le comportement souhaité? le comportement réel?

    Pour (re)partir sur de bonnes bases, peux-tu exprimer clairement ton besoin?
    --> Mappage des imprimantes par OU ou par groupe AD?

    Bonne continuation.

  10. #10
    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 de m'avoir répondu.
    Comme spécifié au début de ma discutions je dois mapper des imprimantes en fonction des O.U classés par service (comptabilité, informatique, direction,etc...)

    Voici l'arbre de mon AD:
    Active directory-->domain.com-->OU1-->sous OU1-->sous OU2-->OU service-->user

    Voici mon code final qui est en erreur à la ligne "LDAP".

    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
    'on error resume next
    Function IsMember(sGroup)
    Dim sAdsPath,oUser,oGroup,g_oGroupDict,g_oNet, strUser
      'Peupler dictionnaire si pas encore cree
      If IsEmpty(g_oGroupDict) Then
          Set g_oGroupDict=CreateObject("Scripting.Dictionary")
          g_oGroupDict.CompareMode = vbTextCompare
          'sAdsPath = DomainName &"/"& UserName
            Set oUser = GetObject("LDAP://dc=xxx 'WHERE objectCategory='user' AND sAMAccountName='" & strUser &"")
                    For Each oGroup In oUser.Groups
            g_oGroupDict.Add oGroup.Name, "-"
                    Next
          Set oUser = Nothing
      End If
    IsMember = CBool(g_oGroupDict.Exists(sGroup))
    End Function
     
    If (IsMember("Informatique")=True) Then
    Set objPrinter= CreateObject("Wscript.Network") 
    objPrinter.AddWindowsPrinterConnection "\\serveur\prt03"
    objPrinter.SetDefaultPrinter "\\serveur\prt03"
    end if
    Si je met "on error resume next" il m'installe directement les imprimantes sans prendre en compte l'O.U service dont je fais partis.

    Merci d'avance pour l'aide

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

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

    Désolé si ça te déçoit, mais tu es vraiment très loin du compte avec ton code. Comprends-tu seulement ce que ce code doit faire?

    Pour info, ce bout de script, qui ne marche pas et c'est normal (pour cela il faudrait au moins penser à initialiser la variable strUser), essaye de mapper une imprimante si l'utilisateur est membre du groupe "Informatique".
    Ce n'est pas du tout ce que tu veux faire, d'après ce que tu as dit, si?!

    Donc il faudrait peut-être mieux repartir du début.

    Voici une idée de structure du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Récupération du login de l'utilisateur courant
    Récupération de l'OU de l'utilisateur
    Si OU = comptabilité, alors mappage de l'imprimante comptabilité
    Si OU = informatique, alors mappage de l'imprimante informatique 
    Si OU = direction, alors mappage de l'imprimante direction
    ...
    Techniquement pour récupérer l'OU d'un utilisateur, tu peux t'inspirer de ça : How Can I Determine the OU a User Account Belongs To?

    En espérant que ça te remet sur la bonne voix.
    Bonne continuation.

Discussions similaires

  1. Réponses: 20
    Dernier message: 20/05/2015, 14h47
  2. Réponses: 10
    Dernier message: 14/03/2013, 16h45
  3. [VBS]installation imprimante réseau IP
    Par dim_italia dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 09/08/2006, 10h39
  4. [CR] mise en forme d'un champs texte en fonction des données
    Par niPrM dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 29/06/2004, 11h57
  5. sélection des bd en fonction des utilisateurs (pg_hba.conf)
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 18/03/2004, 18h34

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