Scripts de demarrage de session - Win 10 - Windows & Software
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
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)
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
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... |
Je fais avec mes connaissances et j'aimerai comprendre tout de même
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.
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
Marsh Posté le 10-11-2020 à 09:04:51
Ryo-Ohki a écrit : |
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)
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.
Marsh Posté le 12-11-2020 à 20:12:52
Pas compris ta remarque.
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