Scripts de demarrage de session

Scripts de demarrage de session - Win 10 - Windows & Software

Marsh Posté le 09-11-2020 à 17:03:50    

Bonjour,
 
j'ai un script VBS qui supprime mes lecteurs réseaux et les récréé en fonction de mes groupes utilisateurs.
Il fonctionne bien quand je le lance sur ma session mais en GPO sur ouverture de session il ne voit pas mes lecteurs réseaux et n'en créé pas. Pourtant, mon groupe et mon nom d'utilisateur est bien récupéré.
 
' En cas d erreur le script continu
'On error resume next
 
' Declaration des variables
Dim WshNetwork,oShell
 
' Declaration des objets
Set WshNetwork = WScript.CreateObject("WScript.Network" )
Set oShell = CreateObject("WScript.Shell" )
 
Log "Debut du programme"
 
'WScript.Sleep(6000)
 
' Get a 60 seconds delay
Delay 60
 
Log "Fin du delai"
 
' Mappage du lecteur I
If isMember("DSI" ) Then
 'Wscript.Echo "DSI"
 Log "DSI"
    mapDrive "I", "\\192.168.127.1\informatique"
Else
 'Wscript.Echo "Pas DSI"
 Log "Pas DSI"
End If
 
' Check for error, then show message.
' If Err.Number <> 0 Then
    ' Msg = "Error # " & Str(Err.Number) & " was generated by " _
            ' & Err.Source & Chr(13) & Err.Description
    ' 'MsgBox Msg, , "Error", Err.Helpfile, Err.HelpContext
    ' Log Msg
' End If
 
Log "Fin du programme"
 
'#####################################################
' Functions secondaires
'#####################################################
 
Function Delay( seconds )
 Dim wshShell, strCmd
 Set wshShell = CreateObject( "WScript.Shell" )
 strCmd = wshShell.ExpandEnvironmentStrings( "%COMSPEC% /C (TIMEOUT.EXE /T " & seconds & " /NOBREAK)" )
 wshShell.Run strCmd, 0, 1
 Set wshShell = Nothing
End Function  
 
Function Log(message)
 '*** Préparation de l'environnement
 Const ForAppending = 8
 Set fso = WScript.CreateObject("Scripting.FileSystemObject" )
 FichierTXT = "c:\temp\log.txt"
 
 '*** Création du fichier texte "c:\log.txt"
 Set NewFichier = fso.OpenTextFile(FichierTXT, ForAppending, True)
 
 '*** Ajout de données dans la variable "data".
 data = Day(Now)& "."& Month(Now)& "."& Day(Now)& "."& Year(Now)& " "& Hour(Now)& ":"& Minute(Now)& ":"& Second(Now)& " | " & message
 
 '*** Ecriture des données de la variable "data" dans le fichier texte.
 NewFichier.WriteLine(data)
 
 '*** Destruction des objets
 NewFichier.Close
 Set fso = Nothing
 
 'WScript.Quit
End Function
 
 
Function IsMember(groupName)
    If IsEmpty(groupListD) then
        Set groupListD = CreateObject("Scripting.Dictionary" )
        groupListD.CompareMode = 1
        ADSPath = EnvString("userdomain" ) & "/" & EnvString("username" )
  Log "User : " & ADSPath
        Set userPath = GetObject("WinNT://" & ADSPath & ",user" )
        For Each listGroup in userPath.Groups
            groupListD.Add listGroup.Name, "-"
        Next
    End if
    IsMember = CBool(groupListD.Exists(groupName))
End Function
 
Function EnvString(variable)
    variable = "%" & variable & "%"
    EnvString = oShell.ExpandEnvironmentStrings(variable)
End Function
 
Function mapDrive(letter,path) ' if the letter is already in use, we first unmount the drive
 'This is the filesystem object, we'll be using the
 'FolderExists method.
 Set objFSO = CreateObject("Scripting.FileSystemObject" )
 'Wscript.Echo "Mounting " & letter & ":" & path
 Log "Mounting " & letter & ":" & path
 'Path exists
 If  objFSO.FolderExists(path) Then
    Log "Share Exists"
 Else
  Log "Share Does Not Exist"  
 End If
 '*** Destruction des objets
 Set objFSO = Nothing
 
 Set colDrives = wshNetwork.EnumNetworkDrives  
 For i = 0 to colDrives.Count-1 Step 2
  Log "Lecteur reseau " & i & " " & colDrives.Item(i)
  If colDrives.Item(i) =  letter & ":" Then
   'Fermeture de la liaison
   'Wscript.Echo "Fermeture de la liaison"
   Log "Fermeture de la liaison " & colDrives.Item(i)
   WshNetwork.RemoveNetworkDrive letter & ":", True, True
  End If
 Next
 'Création de la liaison
 'Wscript.Echo "Creation de la liaison " & letter & ":" & path
 Log "Creation de la liaison " & letter & ":" & path
 
 Err.Clear
 On Error Resume Next
  wshNetwork.MapNetworkDrive letter & ":" , path, True
  'Error traps
  If Err <> 0 Then
    Select Case Err.Number
   Case -2147023694
     'Persistent connection so try a second time
     On Error Goto 0
     WshNetwork.RemoveNetworkDrive strLocalDrive, True, True
     WshNetwork.MapNetworkDrive letter & ":" , path, True
     Log "Second attempt to map drive " & letter & " to " & path
   Case Else
     On Error GoTo 0
     Log " - ERROR: Failed to map drive " & letter & " to " & path
    End Select
    Err.Clear
  End If
End Function


Message édité par gasimoto le 09-11-2020 à 17:09:40
Reply

Marsh Posté le 09-11-2020 à 17:03:50   

Reply

Marsh Posté le 09-11-2020 à 17:08:27    

Log en GPO :
 
9.11.9.2020 16:43:42 | Debut du programme
9.11.9.2020 16:44:43 | Fin du delai
9.11.9.2020 16:44:43 | User : M/toto
9.11.9.2020 16:44:43 | DSI
9.11.9.2020 16:44:43 | Mounting I:\\192.168.127.1\informatique
9.11.9.2020 16:44:43 | Share Exists
9.11.9.2020 16:44:43 | Creation de la liaison I:\\192.168.127.1\informatique
9.11.9.2020 16:44:43 | Fin du programme


Message édité par gasimoto le 09-11-2020 à 17:09:27
Reply

Marsh Posté le 09-11-2020 à 17:10:50    

on est en 2020, ça fait au moins 10 ans qu'on fait pas de scripts (et encore moins en VBS) pour monter des share réseaux...
utilise les GPP (group policy preferences)

Reply

Marsh Posté le 09-11-2020 à 17:11:22    

Log en exécution directe :
 
9.11.9.2020 16:47:59 | Debut du programme
9.11.9.2020 16:48:59 | Fin du delai
9.11.9.2020 16:48:59 | User : M/toto
9.11.9.2020 16:48:59 | DSI
9.11.9.2020 16:48:59 | Mounting I:\\192.168.127.1\informatique
9.11.9.2020 16:48:59 | Share Exists
9.11.9.2020 16:48:59 | Lecteur reseau 0 I:
9.11.9.2020 16:48:59 | Fermeture de la liaison I:
9.11.9.2020 16:48:59 | Lecteur reseau 2 J:
9.11.9.2020 16:48:59 | Lecteur reseau 4 K:
9.11.9.2020 16:48:59 | Lecteur reseau 6 L:
9.11.9.2020 16:48:59 | Lecteur reseau 8 M:
9.11.9.2020 16:48:59 | Lecteur reseau 10 S:
9.11.9.2020 16:48:59 | Lecteur reseau 12 T:
9.11.9.2020 16:48:59 | Creation de la liaison I:\\192.168.127.1\informatique
9.11.9.2020 16:48:59 | Fin du programme

Reply

Marsh Posté le 09-11-2020 à 17:13:28    

Je@nb a écrit :

on est en 2020, ça fait au moins 10 ans qu'on fait pas de scripts (et encore moins en VBS) pour monter des share réseaux...
utilise les GPP (group policy preferences)


Je fais avec mes connaissances et j'aimerai comprendre tout de même

Reply

Marsh Posté le 09-11-2020 à 18:11:09    

Tu es admin de ton poste ?
 
Si c'est le cas ce qui se produit c'est que le script de login de la GPO s'exécute dans le contexte élevé (comme si tu faisais clic droit -> exécuter en tant qu'admin). Le script marche et monte bien le disque I sauf que tu ne le vois pas dans ton contexte limité par l'UAC avec le jeton Administrator purgé.
 
Par contre si tu le lances à la main pour tester ou en login avec un utilisateur simple, le script marchera comme attendu...
 
C'est by design malheureusement.
https://pcloadletter.co.uk/2010/05/ [...] rk-drives/
 
Donc bonne solution -> Group Policy Preference.


---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker
Reply

Marsh Posté le 09-11-2020 à 22:34:33    

Effectivement et avec l'UAC désactivée
 
Merci pour cette réponse étayée et claire  ;)

Reply

Marsh Posté le 10-11-2020 à 09:04:51    

Ryo-Ohki a écrit :


C'est by design malheureusement heureusement.


 [:moundir]


---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Marsh Posté le 10-11-2020 à 13:42:50    

Heureusement ? Je ne sais pas. Ca veut dire qu'en tant qu'admin ton login script s'exécute sans restriction de contexte et qu'il peut mettre le dawa si un petit malin a profité d'une faille pour y rajouter du contenu. En gros tu perds ta dernière protection contre un contenu malicieux.
 
Je vois surtout ça comme un défaut de sécurité, m'enfin bon.
 
(bon après si un pirate a accès en modif au login script il a surement aussi accès aux GPO donc il a moyen d'y aller plus franco sur l'ensemble du domaine, mais bon un UAC bypass c'est déjà bien crade)


Message édité par Ryo-Ohki le 10-11-2020 à 13:48:28

---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker
Reply

Marsh Posté le 12-11-2020 à 09:22:04    

Heureusement que Windows gère des contextes d'exécution différents ainsi que l'élévation de privilèges.


---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Marsh Posté le 12-11-2020 à 09:22:04   

Reply

Marsh Posté le 12-11-2020 à 20:12:52    

Pas compris ta remarque.


---------------
The Lapin, reloaded  |  "Anything can happen in Formula One, and it usually does." -- Murray Walker
Reply

Sujets relatifs:

Leave a Replay

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