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: Win32_LogicalFileSecuritySetting erreur d'initialisation


Sujet :

VBScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 29
    Points
    29
    Par défaut VBS: Win32_LogicalFileSecuritySetting erreur d'initialisation
    Salut,
    J'ai lu cette discussion.
    Je dois moi-même faire un tel script. J'ai exactement le même problème que toi. En regardant de plus près la fonction que tu as postée, elles sont équivalentes... sauf que moi ça ne fonctionne pas peut-être as-tu modifié du code ailleurs qui a réglé le problème.

    Ci-après mon code :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    Option Explicit
     
    Dim booErreur, booCorrespondance
    Dim strMessageFinal, strTypeMessage, strTitreMessage, strDossierRacine, strCheminDossierEcriture, strCodeProprietaireRecherche
    Dim objFSO, objDossierRacine, objFichierResultat, objFichierLog
     
    Const conFichierResultat = "Listing_fichiers.txt"
    Const conFichierLog = "LogsRecuperation.txt"
    Const conEcriture = 2	'spécifie que le fichier est en écriture
     
    booErreur = False	'initialisation de présence d'erreur à False
    booCorrespondance = False	'initialisation de correspondance entre propriétaires à False
     
    Do
    strCodeProprietaireRecherche = InputBox("Saisir le code de l'utilisateur recherché (UserName) :","Code de l'utilisateur","Code utilisateur")
    Loop While (strCodeProprietaireRecherche = "Code utilisateur")	'Boucle tant que strCodeProprietaireRecherche = "Code utilisateur"
     
    If strCodeProprietaireRecherche <> "" Then	'si strCodeProprietaireRecherche est non null alors exécution, sinon rien
    	Set objFSO = CreateObject("Scripting.FileSystemObject")
    	strDossierRacine = funcSelectionRepertoire(False, " de recherche")	'sélection du dossier de base en graphique
    	strCheminDossierEcriture = funcSelectionRepertoire(True, " de résultats")	'sélection du dossier dans lequel mettre tous les résultats
    	Set objDossierRacine = objFSO.GetFolder(strDossierRacine)
    	Set objFichierResultat = objFSO.OpenTextFile(strCheminDossierEcriture & "\" & conFichierResultat, conEcriture, True)
    	Set objFichierLog = objFSO.OpenTextFile(strCheminDossierEcriture & "\" & conFichierLog, conEcriture, True)
     
    	subParcourirArborescence objDossierRacine, objFichierResultat, objFichierLog, strCodeProprietaireRecherche
     
    	If booErreur Then
    		MsgBox "Des erreurs sont survenues durant l'exécution du script, veuillez consulter le fichier " & conFichierLog & vbcrlf & "Script terminé", vbCritical, "Erreur"
    	Else
    		MsgBox "Script terminé", vbInformation, "Fin"
    	End If
    Else	'si Annuler est sélectionné
    	MsgBox "Vous avez annulé l'exécution du script", vbCritical, "Annulation"
    End If
     
    '=============================== Procédures et fonctions ===============================================
     
    Function funcSelectionRepertoire(booCreationAutorisee, strDescriptionDemande)
    	Const conReturnOnlyFSDirs = &H1
    	Const conNoNewFolderButton = &H200
     
    	Dim objShell, objDossier, objDossierChoisi
     
    	Set objShell = CreateObject("Shell.Application")
    	If booCreationAutorisee Then
    		Set objDossier = objShell.BrowseForFolder(&H0&, "Choisir un répertoire" & strDescriptionDemande, conReturnOnlyFSDirs)
    	Else
    		Set objDossier = objShell.BrowseForFolder(&H0&, "Choisir un répertoire" & strDescriptionDemande, conReturnOnlyFSDirs + conNoNewFolderButton)
    	End If
     
    	If objDossier Is Nothing Then
    		MsgBox "Vous n'avez rien sélectionné", vbCritical, "Abandon"
    		Wscript.Quit
    	Else
    		Set objDossierChoisi = objDossier.Self
    		funcSelectionRepertoire = objDossierChoisi.Path
    	End If
     
    	Set objShell = Nothing
    	Set objDossier = Nothing
    	Set objDossierChoisi = Nothing
    End Function
     
    Sub subParcourirArborescence(objDossierParent, objFichierEcriture, objFicLog, strCodeProprietaireRecherche)	'parcourt l'arborescence de façon RECURSIVE tous les fichiers et les dossiers
    	Dim colFicArbo, colSousDossiers
    	Dim objFicArbo, objDossierArbo
    	Dim strNomProprio
     
    	Set colFicArbo = objDossierParent.Files
    	If colFicArbo.Count <> 0 Then	'vérifie qu'il y a des fichiers
    		For Each objFicArbo In colFicArbo	'Non récursif
    			strNomProprio = funcObtenirProprietaire(objFicArbo.Path, objFicLog)
    			If funcComparaisonChaineCaractere(strCodeProprietaireRecherche, strNomProprio) Then
    				objFichierEcriture.WriteLine objFicArbo.Path
    			End If
    		Next
    	End If
     
    	Set colSousDossiers = objDossierParent.SubFolders
    	If colSousDossiers.Count <> 0 Then	'vérifie qu'il y a des sous-dossiers
    		For Each objDossierArbo In colSousDossiers
    			strNomProprio = funcObtenirProprietaire(objDossierArbo.Path, objFicLog)
    			If funcComparaisonChaineCaractere(strCodeProprietaireRecherche, strNomProprio) Then
    				objFichierEcriture.WriteLine objDossierArbo.Path
    			End If
    			subParcourirArborescence objDossierArbo, objFichierEcriture, objFicLog, strCodeProprietaireRecherche	'RECURSIVITE !!!!!
    		Next
    	End If
    End Sub
     
    Function funcObtenirProprietaire(strCheminObjetArbo, objFicLog)	'renvoie le UserName du propriétaire
    	Dim objWMIDroits, objWMISecurityDescriptor
    	Dim RetVal
     
    	On Error Resume Next
    	Err.Clear
    	Set objWMIDroits = GetObject("winmgmts:").Get("win32_LogicalFileSecuritySetting='" & strCheminObjetArbo & "'")
    	RetVal = objWMIDroits.GetSecurityDescriptor(objWMISecurityDescriptor)
     
    	If Err <> 0 Then
    		subGestionErreur objFicLog, strCheminObjetArbo, Err.Number, Err.Description
    	Else
    		If RetVal <> 0 Then
    			subGestionErreur objFicLog, strCheminObjetArbo, RetVal, "Impossible de récupérer le descripteur de sécurité"
    		Else
    			funcObtenirProprietaire = objWMISecurityDescriptor.Owner.Name
    		End If
    	End If
    	On Error Goto 0	'fin de la gestion d'erreur
    End Function
     
    Function funcComparaisonChaineCaractere(strChaineReference, strChaineComparaison)
    	strChaineReference = UCase(strChaineReference)
    	strChaineComparaison = UCase(strChaineComparaison)
    	funcComparaisonChaineCaractere = Eval("strChaineReference = strChaineComparaison")
    End Function
     
    Sub subGestionErreur(objFicLog, strCheminErreur, intNumeroErreur, strDescriptionErreur)
    	booErreur = True
    	objFicLog.WriteLine "L'erreur porte sur : " & strCheminErreur
    	objFicLog.WriteLine "Numéro d'erreur : " & intNumeroErreur
    	objFicLog.WriteLine "Description d'erreur : " & strDescriptionErreur & vbcrlf
    End Sub
    Pour y voir plus clair, voici ma fonction :
    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
    Function funcObtenirProprietaire(strCheminObjetArbo, objFicLog)	'renvoie le UserName du propriétaire
    	Dim objWMIDroits, objWMISecurityDescriptor
    	Dim RetVal
     
    	On Error Resume Next
    	Err.Clear
    	Set objWMIDroits = GetObject("winmgmts:").Get("win32_LogicalFileSecuritySetting='" & strCheminObjetArbo & "'")
    	RetVal = objWMIDroits.GetSecurityDescriptor(objWMISecurityDescriptor)
     
    	If Err <> 0 Then
    		subGestionErreur objFicLog, strCheminObjetArbo, Err.Number, Err.Description
    	Else
    		If RetVal <> 0 Then
    			subGestionErreur objFicLog, strCheminObjetArbo, RetVal, "Impossible de récupérer le descripteur de sécurité"
    		Else
    			funcObtenirProprietaire = objWMISecurityDescriptor.Owner.Name
    		End If
    	End If
    	On Error Goto 0	'fin de la gestion d'erreur
    End Function

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Essayes un truc de ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objWMIDroits = GetObject("winmgmts:").Get("win32_LogicalFileSecuritySetting='""" & strCheminObjetArbo & """'")
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    J'ai essayé avec les guillemets supplémentaires, mais ça me sort alors une erreur à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *****.vbs(103, 2) SWbemServicesEx: Non trouvé
    PS : Désolé pour la réponse tardive, j'étais en vacances pendant 3 semaines

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Un exemple de code de MS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
     
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_LogicalFileSecuritySetting WHERE Path=""c:\\Temp""",,48) 
    For Each objItem in colItems 
        Wscript.Echo "Win32_LogicalFileSecuritySetting for file c:\Temp"
        Wscript.Echo "ControlFlags: " & objItem.ControlFlags
        Wscript.Echo "Description: " & objItem.Description
        Wscript.Echo "OwnerPermissions: " & objItem.OwnerPermissions
        Wscript.Echo "Path: " & objItem.Path
        Wscript.Echo "SettingID: " & objItem.SettingID
    Next
    Surtout respecte cette syntaxe, cela a des chances de mieux marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
     
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalFileSecuritySetting WHERE Path=""" & strCheminObjetArbo  & """",,48)
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/02/2008, 12h22
  2. Erreur d'initialisation de requête - option RTF
    Par verticka dans le forum WinDev
    Réponses: 2
    Dernier message: 25/11/2005, 09h55
  3. [BDE Errors] Erreur d'initialisation
    Par SubZero2 dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/07/2005, 08h46
  4. Erreur d'initialisation du BDE sous Delphi7 ent et WinXP
    Par touhami dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/02/2005, 01h51
  5. [Tomcat MySQL] Erreur d'initialisation d'un pool
    Par mmed dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2005, 09h22

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