scripts de demarrage de session

scripts de demarrage de session - Windows & Software

Marsh Posté le 26-07-2005 à 10:51:03    

Bonjour a Tous, :hello:  
 
J'ai realise des scripts (.bat) pour que le client ait acces a des lecteurs reseau... Je les ai mis ds le repertoire c:\windows\sysvol\sysvol\nomdedomaine.local\scripts.
 
J'ai par la meme occasion informé le profil utilisateurs qu'un scripts etait disponible pour lui a cet endroit. (clic droit sur un utilisateur, propriete, onglet profil et j'ai rempli le champ "scripts d'ouverture de session" ).
 
Lorsque je me connecte grace a mon client sous windows XP SP2, il ne veut rien savoir, il ne se connecte pas aux lecteurs reseaux que je lui indique. (mais lorsque je les execute en local depuis le poste client il veut bien se connecter...)
 
Comment faire pour qu'il fasse ce que je veux??? :fou:  
 
indication: je ne souhaite pas passer par la GPO!!!
 
MERCI de m'aider.... :??:

Reply

Marsh Posté le 26-07-2005 à 10:51:03   

Reply

Marsh Posté le 26-07-2005 à 11:03:55    

Qu'est-ce que tu exécute en local ? les scripts ?
essaye de passer par le voisinage réseau, sur ton serveur, et regarde dans le répertoire partagé NETLOGON si les scripts s'y trouvent bien.

Reply

Marsh Posté le 26-07-2005 à 11:11:39    

Bon ... A l'heure actuelle réaliser des batchs comme se passer des GPO pour la distribution des paramètres et des scripts me semble tout simplement inadéquat.
 
Les batchs sont lents et manquent cruellement de souplesse. De plus utiliser le profil de chaque utilisateur est le meilleur moyen pour oublier quelques utilisateurs au passage et ne plus savoir quel script s'applique à quel utilisateur (mais bon si tu aimes cliquer pour aller modifier chauqe utilisateur lors des restructuration des départements).
 
Pour placer ton script (hors GPO) je te conseille d'utiliser \\[nom_du_domaine]\netlogon ca pointera sur le bon emplacement.
 
Voilà si jamais tu décidais de faire les choses avec WSH / GPO voici un script en VBS que j'ai écris (à partir de plusieurs exemples) :
 

'
' Customer  :  
' Filename  : logon.vbs
' Author    : Cédric Rathgeb
' Date      : 2005-06-20
' Version   : 2.1.3
' Copyright : Public Domain
' Warranty  : None
'  
 
On Error Resume Next
 
Const E_ADS_PROPERTY_NOT_FOUND  = &h8000500D
BS = Chr(92) ' Backslash
DBS = BS & BS ' Double Backslash
 
Set wshNetwork = WScript.CreateObject("WScript.Network" )
Set wshShell = WScript.CreateObject("WScript.Shell" )
Set wshSysEnv = wshShell.Environment("SYSTEM" )
sUser = LCase(wshShell.ExpandEnvironmentStrings("%USERNAME%" ))
sComputer =  LCase(wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%" ))
sServer = "monserveur1"
sLDAPPath = "LDAP://dc=domain,dc=local"
sGroup = GetPrimaryGroup(sUser, sLDAPPath)
 
Select Case LCase(sGroup)
  Case "juridique", "marketing", "secrétariat général"
    sGroupUser = "état major" & BS & sGroup
    sGroup = "état major"
  Case "cave", "divers", "services aux locataires", "valeurs"
    sGroupUser = "divers" & BS & sGroup
    sGroup = "divers"
  Case Else
    sGroupUser = sGroup
End Select
 
' The pairs are "drive" and "share"
aryShares   = Array(Array("T:", DBS & sServer & BS & "ClientApps" ), _
                    Array("U:", DBS & sServer & BS & "utilisateurs$" & BS & sGroupUser & BS & sUser), _
                    Array("V:", DBS & sServer & BS & "groupes$" & BS & sGroup & BS & "@commun" ), _
                    Array("W:", DBS & sServer & BS & "groupes$" ), _
                    Array("X:", DBS & sServer & BS & "commun$" ))
' The pairs are "printers" and "default printer for computers"
aryPrinters = Array(Array(DBS & sServer   & BS & "comptabilite_hp_laserjet_color_4600n", "apicella;laureau" ), _
                    Array(DBS & sServer   & BS & "comptabilite_hp_laserjet_5", "andre" ), _
                    Array(DBS & sServer   & BS & "couloir_hp_laserjet_4050n", "bchatelain;ecuyer;reception1;reserve;schmid" ), _
                    Array(DBS & sServer   & BS & "couloir_hp_laserjet_5si", "" ), _
                    Array(DBS & sServer   & BS & "couloir_oki_9200c", "" ), _
                    Array(DBS & "golay"   & BS & "quai_hp_psc_2210", "" ), _
                    Array(DBS & "magasin" & BS & "quai_hp_laserjet_3015", "magasin", "" ), _
                    Array(DBS & "treand"  & BS & "quai_hp_laserjet_1012", "treand;lacotte", "" ), _
                    Array(DBS & "arianne" & BS & "etatmajor_brother_hl_1230", "arianne;may", "" ), _
                    Array(DBS & "benoist" & BS & "valeur_hp_980cxi", "benoist;flilipone" ))
 
' Search account in Active Directory
'   Return AD distinguished name or an empty string if not found
Function GetADDistinguishedName(sAccount, sADPath)
  Set oConnection = CreateObject("ADODB.Connection" )
  oConnection.Open "Provider=ADsDSOObject;"
  Set oCommand = CreateObject("ADODB.Command" )
  oCommand.ActiveConnection = oConnection
  oCommand.CommandText = "<" & sADPath & ">;(&(objectCategory=User)(samAccountName=" & sAccount & " ));samAccountName,distinguishedName;subtree"
  Set oRecordSet = oCommand.Execute
  If oRecordset.RecordCount = 0 Then
    ' Not found !
    GetADDistinguishedName = ""
  Else
    GetADDistinguishedName = oRecordset.Fields("distinguishedName" )
  End If
  oConnection.Close
End Function
 
' Get groups a user belongs to
'   Return an array or empty
Function GetADGroupsUserBelongsTo(sAccount, sADPath)
  Set oUser = GetObject("LDAP://" & GetADDistinguishedName(sAccount, sADPath))
  aryMemberOf = oUser.GetEx("memberOf" )
  If Err.Number = E_ADS_PROPERTY_NOT_FOUND Then
    ' Not Fount !
    GetADGroupsUserBelongsTo = Array()
  Else
    GetADGroupsUserBelongsTo = aryMemberOf
  End If
End Function
 
' Get primary group for this user
'    Return a string with groupname
'    an empty string if not found
Function GetPrimaryGroup(sAccount, sADPath)
  Set oUser = GetObject("LDAP://" & GetADDistinguishedName(sAccount, sADPath))
  iPrimaryGroupID = oUser.Get("primaryGroupID" )
  If Not(Err.Number = E_ADS_PROPERTY_NOT_FOUND) Then
    Set oConnection = CreateObject("ADODB.Connection" )
    oConnection.Open "Provider=ADsDSOObject;"
   
    Set oCommand = CreateObject("ADODB.Command" )
    oCommand.ActiveConnection = oConnection
    oCommand.CommandText = "<" & sADPath & ">;(objectCategory=Group);distinguishedName,primaryGroupToken;subtree"  
    Set oRecordSet = oCommand.Execute
    Do Until oRecordset.EOF
      If oRecordset.Fields("primaryGroupToken" ) = iPrimaryGroupID Then
        sGroup = oRecordset.Fields("distinguishedName" )
      End If
      oRecordset.MoveNext
    Loop
    sGroup = Left(sGroup, InStr(sGroup, "," ) - 1)
    GetPrimaryGroup = sGroup
    oConnection.Close
  Else
    GetPrimaryGroup = ""
  End If
End Function
 
' Disconnects all drives
Sub DisconnectDrives()
  ' Connect drives
  Set colDrives = wshNetwork.EnumNetworkDrives
  For i = 0 To colDrives.Count - 1 Step 2
    wshNetwork.RemoveNetworkDrive colDrives(i)
  Next
End Sub
 
' Map drive
Sub MapDrive(sDrive, sShare)
  wshNetwork.MapNetworkDrive sDrive, sShare
End Sub
 
' Disconnect all printers
Sub DisconnectPrinters()
  Set colPrinters = wshNetwork.EnumPrinterConnections
  For i = 0 To colPrinters.Count - 1 Step 2
    wshNetwork.RemovePrinterConnection colPrinters(i)
  Next
End Sub
 
' Map printer
Sub MapPrinter(sPrinter)
  wshNetwork.AddWindowsPrinterConnection sPrinter
End Sub
 
' Set Default Printer
Sub SetDefaultPrinter(sPrinter)
  wshNetwork.SetDefaultPrinter sPrinter
End Sub
 
 
 
' Remove previous connections
DisconnectDrives
DisconnectPrinters
 
' Connect shares to local drives
For i = LBound(aryShares) to UBound(aryShares)
  aryAux = aryShares(i)
  MapDrive aryAux(0), aryAux(1)
Next
 
' Connect printers
For i = LBound(aryPrinters) to UBound(aryPrinters)
  aryAux = aryPrinters(i)
  MapPrinter aryAux(0)
  aryComputers = Split(aryAux(1), ";" )
  For j = LBound(aryComputers) to UBound(aryComputers)
    If sComputer = aryComputers(j) Then
      SetDefaultPrinter(aryAux(0))
    End If
  Next
Next
 
' Copy Icons on User's Desktop
Set oFSO = CreateObject("Scripting.FileSystemObject" )
sSource = DBS & "monserveur1" & BS & "ClientApps" & BS & "icons" & BS & "*.*"
sDestination = "C:" & BS & "documents and settings" & BS & sUser & BS & "bureau"
oFSO.CopyFile sSource, sDestination, True
Set oFSO = Nothing
 
 
' Add default paths keys for Word and Excel XP & 2003
wshShell.Run("regedit /s word_excel_paths.reg" )
 
' Delete objects
Set wshNetwork = Nothing
Set wshShell   = Nothing
Set wshSysEnv  = Nothing


 
En clair ce code permet :
- de connecter des lecteurs réseau (de manière conditionnelle)
- de connecter des imprimantes partagées en réseau
- de choisir suivant la machine une imprimante par défaut
- de copier les icônes de programmes disponibles sur un partage réseau sur le bureau de l'utilisateur
- d'ajouter à l'aide d'un fichier REG (j'aurais pu utiliser les GPO) des clefs dans la base de registre
- de déterminer les groupes d'un utilisateur en allant intéroger active directory
- de déterminer le groupe primaire de l'utilisateur (histoire de lui connecter un lecteur réseau du groupe)
 
Evidement il faudra l'adapter à ton serveur, tes partages, etc... mais ca te donnera une bonne base. Au final un seul script pour tous mes utilisateurs ! Tu trouves de la doc sur les scripts aux endroits suivants :
 
http://msdn.microsoft.com/scripting/
  et
http://www.microsoft.com/technet/s [...] fault.mspx


Message édité par Requin le 26-07-2005 à 11:15:04
Reply

Marsh Posté le 26-07-2005 à 11:13:34    

Merci d'avoir repondu...
 
lorsque j'execute les scripts en local, ils me donnent acces a ce que je souhaite....  
 
lorsque je passe par le voisnage reseau, le les voient bien, ils sont bien dans le repertoire netlogon...  je ne comprends vraiment pas pourquoi le client ne souhaite pas les executer!!!!!!
 
 :??:  :??:

Reply

Marsh Posté le 26-07-2005 à 11:19:03    

As-tu demandé à Windows XP de patienter jusqu'à ce que le support réseau soit chargé avant de permettre le login ? Car sinon il peut arriver que tu te logues à l'aide du cache local sans que le support réseau soit complètement opérationnel, ce qui a pour conséquence de faire échouer la commande NET.
 
Ajoute une PAUSE à la fin de ton batch pour que la fenêtre reste ouverte...

Reply

Marsh Posté le 26-07-2005 à 11:19:52    

Merci a toi requin... mais je ne pense pas avoir a utiliser ton script de si tot... il me semble on ne peut plus complet... mais mon reseau ne peux demande pas autant de choses... c'est juste un petit reseau d'une dizaine de postes client...
 
Mais MERCI tout de meme... je pourrais peu etre en avoir besoin un jour ou l'autre...
 
MERCI ;)

Reply

Marsh Posté le 26-07-2005 à 11:26:28    

ou puis je demander a windows XP de patienter jusqu'a ce que le support reseau soit charge???
 
et pour la pause je lui ai demande... lorsque j'execute le script en local, il me demande bien d'appuyer sur une touche pour continuer...
 

Reply

Marsh Posté le 26-07-2005 à 11:31:42    

Dans les GPO :o
 
Bon si tu regardes que te donnent tes commandes NET USE ?
 
As-tu des erreurs ? Quelles sont-elles ?
 
Si tu fais un login immédiatement après le reboot que se passe-il ?
 
Si tu fais un logoff, suivi d'un login que se passe-il ?
 
Revérifie aussi le nom de ton script dans le profil utilisateur ! Une faute de frappe c'est si vite arrivé !


Message édité par Requin le 26-07-2005 à 11:32:53
Reply

Marsh Posté le 26-07-2005 à 11:41:45    

bon... je n'ai pas d'erreurs dans mon script car lorsque je l'execute ne local sur mon servuer ou meme mon portse client, il fonctionnne...
 
Pour le scripts, on ne peut plus simple:
 
net use Z: \\192.168.0.1\commun$
pause
 
je ne pense pas q'uil y ait d'erreur car sinon, il ne s'executerait pas en local!!!!!
 
j'ai meme essaye de passer par la GPO!!!! et meme la ca ne fonctionne pas!!!!

Reply

Marsh Posté le 26-07-2005 à 11:48:53    

pour le login apres le reboot... ca ne fonctionne pas non plus, et pour le logoff et ensuite le logon.. ca ne fonctionne toujours pas non plus!!!
 

Reply

Marsh Posté le 26-07-2005 à 11:48:53   

Reply

Marsh Posté le 26-07-2005 à 11:50:36    

Les comptes ordinateurs et utilisateurs sont bien dans l'unité d'organisation sur laquelle tu appliques la GPO ?

Reply

Marsh Posté le 26-07-2005 à 11:51:09    

Tu as bien fait un "gpupdate /force" pour appliquer ta GPO au poste client ?

Reply

Marsh Posté le 26-07-2005 à 12:04:57    

oui je l'ai bien fait... enfin bon.. c pas grave.. je v essayer de me decrouiller autrement... il doit bien y avoir une solution....
 
MERCI DE TON AIDE

Reply

Marsh Posté le 26-07-2005 à 14:55:04    

C'EST BON J'AI REUSSI!!!!!!!!!!!!!
 
en fait mon erreur etait de mettre dans le profil utilisateur le chemin complet pour le script et non de mettre simplement le_nom_du_script.bat....
 
MERCI DE VOTRE AIDE A TOUS... et a bientot.. pur un prochain post!!!!

Reply

Marsh Posté le 26-07-2005 à 15:19:12    

kenny2410 a écrit :

C'EST BON J'AI REUSSI!!!!!!!!!!!!!
 
en fait mon erreur etait de mettre dans le profil utilisateur le chemin complet pour le script et non de mettre simplement le_nom_du_script.bat....
 
MERCI DE VOTRE AIDE A TOUS... et a bientot.. pur un prochain post!!!!


Ah zut, trop tard...c'est justement ce que j'allais de dire :D

Reply

Marsh Posté le 30-07-2005 à 19:55:12    

Requin ton script dechire bien.  
Je suis reste encore au batch ca me fait hesiter :o
Le truc que je cherche c surtout mapper les printers suivant le nom et le groupe. C possible en batch mais avec des ptits utils( ifmember...)
Le batch est il plus rapide a executer que le VB ?


Message édité par hfrfc le 30-07-2005 à 19:55:37
Reply

Marsh Posté le 01-08-2005 à 22:13:26    

Non le batch est bcp bcp bcp plus lent qu'un script en VBScript ou JScript.
 
C'est dû principalement au fait que la création de processus sous Windows prend bcp de temps (sous Linux par contre ...) et donc que tout appel à un soft externe ralenti passablement l'exécution du batch.
 
A titre de comparaison j'ai un script de commande en batch qui utilise con2prt pour connecter des imprimantes réseau (il y en a un paquet qui sont connectées)... le script met plus de 30 secondes à s'exécuter en batch, la nouvelle version en VBS met moins de 5 secondes.

Reply

Marsh Posté le 12-08-2005 à 17:06:21    

Ah voila qui va me faire hesiter :o
Je me sers du batch pour synchro l'horloge des postes clients (le basique net time et un utilitaire pr gerer les droits CPAU) et pour les imprimantes +  partages reseau + infos diverses. C'est vrai que ca commence a prendre pas mal de temps a l'ouverture de la session. Le probleme c'est que j'ai peu de connaissance en VBS :(
 
Je posterai mes batchs quand je reprendrai le travail.

Reply

Marsh Posté le 12-08-2005 à 19:43:57    

Bah il y a la doc du langage et de nombreux exemples dans les liens que je t'ai donné ci-dessus. Il y a aussi de nombreux livres traitants de VBScript.
 
Après il y a quelques objets qui sont bien pratiques :
- FSO pour manipuler les fichiers
- ADO pour accéder à des bases de données  
- ADSI pour active directory
- WMI pour le matériel
- ...
 
Au final d'une souplesse incomparable à un batch. De toute manière tu vas commencer avec des scripts simples, puis petit à petit en développer des plus complexes pour répondre à diverses tâches.

Reply

Marsh Posté le 16-12-2005 à 09:00:07    

Voila mon script (env samba/openldap)
 

Code :
  1. @echo off
  2. rem :::: Montage commun de T
  3. net use T: %LOGONSERVER%\temp /PERSISTENT:NO >NUL
  4. rem :::: Appel du script personnalise ::::::::::
  5. rem :: ce script username lance un autre script qui monte 4 lecteurs reseau si necessaire (suivant le groupe de l'user en fait..)
  6. CALL %USERNAME%.bat
  7. rem ::: detection des OS
  8. rem ::::  Win9x checks ::::::::::::
  9. rem VER |find /i "Windows 95" >NUL
  10. rem IF NOT ERRORLEVEL 1 GOTO W9598ME
  11. rem VER |find /i "Windows 98" >NUL
  12. rem IF NOT ERRORLEVEL 1 GOTO W9598ME
  13. rem VER |find /i "Windows Millennium" >NUL
  14. rem IF NOT ERRORLEVEL 1 GOTO W9598ME
  15. rem :::: NT/XP checks ::::::::::::
  16. VER | find "XP" > nul
  17. IF %errorlevel% EQU 0 GOTO XP_2K
  18. VER | find "2000" > nul
  19. IF %errorlevel% EQU 0 GOTO XP_2K
  20. VER | find "NT" > nul
  21. IF %errorlevel% EQU 0 GOTO s_win_NT
  22. ECHO Os non reconnu !
  23. GOTO :end
  24. rem  :::: Win9x commands ::::::::::::
  25. rem :W9598ME
  26. rem ECHO "Parametrage du client 95/98..."
  27. rem GOTO :end
  28. rem :::: NT/XP commands ::::::::::::
  29. :XP_2K
  30. ECHO "!! NE PAS FERMER CETTE FENETRE !!"
  31. rem :::: parametrage de IE
  32. regedit /S db_ie.reg
  33. rem :::::lancement d'un processus admin pour mettre a jour l'heure
  34. %LOGONSERVER%\netlogon\CPAU.exe -file %LOGONSERVER%\netlogon\ad_job -dec -profile -wait -hide >NUL
  35. rem :::montage imprimantes
  36. CALL s_printers.vbs
  37. goto :fin
  38. :s_win_NT
  39. ECHO "Parametrage du client NT..."
  40. goto :fin
  41. rem :::: End :::::::::::
  42. :fin
  43. rem :::: ecran de bienvenue
  44. START /MAX s_welcome.bat
  45. :end


 
Probleme :  
- c super lent, surtout le mapage reseau (lancé dans username.bat suivant l'utilisateur)
- il n'y a pas de variable pour le groupe et donc pas moyen de faire des mapages en fonction de cela. Il existe bien ifmember, mais j'ai peur que ce soit encore plus lent... En gros, j'aimerais le transformer en VBS, et l'interfacer avec openldap pour retrouver le groupe en fonction de chaque utlisateur. Ca serait comme le script de requin mais en NON AD...
 
Des idees ? :o


Message édité par hfrfc le 16-12-2005 à 09:09:13

---------------
D3/Hots/Hs Doc#2847
Reply

Marsh Posté le 20-12-2005 à 09:18:00    

Bon j ai adapté mon script en vbs. Le seul (GROS) probleme est la recuperation du groupe de l'utilisateur. J'utilise LDAP (+samba) et j'arrive bien a effectuer une requete. Le probleme c'est que les fonctions utilisées ci dessus sont prevues pour AD et ne marche pas dans mon cas :/


---------------
D3/Hots/Hs Doc#2847
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed