S.O.S. Script supprimant les lignes d'un texte selon des droit incohérents sur l [Résolu]

Signaler
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008
-
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008
-
Bonjour à tous et à toute...
J'ai un petit problème dans ma plantation.
Je dois faire un script supprimant les lignes d'un texte selon des droit incohérents sur les répertoires.
J'ai réussi à générer un fichier texte en utilsant dumpsec.
Ci-dessous un morceau de mon fichier texte:

\\serveur\répertoire\truc\,BIDULE\truc          ,RWXD       RWXD     

\\serveur\répertoire\truc\,BIDULE\Domain Admins      ,all        all      

\\serveur\répertoire\truc\,BIDULE\ZZZ-M              ,RWXD       RWXD     


\\serveur\répertoire\machin\,BIDULE\truc    ,RWXD       RWXD     

\\serveur\répertoire\machin\,BIDULE\Administrators      ,all        all      

\\serveur\répertoire\machin\,BIDULE\ZZZ-M              ,RWXD       RWXD

j'ai réussi à supprimer les lignes concernant les droits liés à l'administration par mot clé comme ceci:

Dim FSO, Fichier, cible, Ligne
Set FSO = CreateObject("Scripting.FileSystemObject" )
Set Fichier = FSO.OpenTextFile("c:\resultat_in.txt" ) 'fichier à analyser
Set cible = FSO.CreateTextFile("c:\resultat_out.txt",true) 'fichier resultat
Do While Not Fichier.AtEndOfStream
      Ligne = Fichier.Readline
       if Instr (Ligne, "ZZZ-M" ) = 0 then 'test de la presence de la chaine
  if Instr (Ligne, "Domain Admins" ) = 0 then
  if Instr (Ligne, "Administrators" ) = 0 then
    cible.writeline Ligne 'si elle n'y est pas on ecrit
   end if
 end if
      end if
Loop
Fichier.Close
cible.close

Ca me donne:

\\serveur\répertoire\truc\,BIDULE\truc          ,RWXD       RWXD


\\serveur\répertoire\machin\,BIDULE\truc    ,RWXD       RWXD     

mais il me reste toutes les lignes en rapport aux utilisateurs et je veux juste récupérer les incohérence comme cidessous:

\serveur\répertoire\machin\,BIDULE\truc    ,RWXD       RWXD

Je ne sais pas si j'ai été clair , mais si quelqu'un a une idée .

Merci d'avance de votre aide. 

9 réponses

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonjour,

Chaque ligne extraite est mise dans un tableau.
Ceci pour éviter les accès read (infile) et write (outfile).
Puis, lecture du tableau et écriture dans outfile.
Le  Join(arrLine,"") permet de remettre les antislashs éliminés par le split précédent.

strInfile = "c:\test.txt"
strOutfile = "c:\test_result.txt"

ReDim arrResult(0)

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile(strInfile, 1)
 
Do While Not objTextStream.AtEndOfStream
   arrLine = Split(objTextStream.ReadLine,"")
   If UBound(arrLine) > 2 Then
      If UBound(Filter(arrLine, arrLine(UBound(arrLine)-2))) = 0 Then
         ReDim Preserve arrResult(UBound(arrResult) + 1)
         arrResult(UBound(arrResult)) = Join(arrLine,"")     
      End If
   End if
Loop
objTextStream.Close

Set objTextStream = objFso.OpenTextFile(strOutfile, 2, True)
 
If UBound(arrResult) <> 0 Then
   For i=1 To UBound(arrResult)
       objTextStream.Write arrResult(i) &vbcrlf
   Next
End If
objTextStream.Close

Set objFso  = Nothing
Set objTextStream = Nothing

jean-marc
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
956
Date d'inscription
lundi 30 mai 2005
Statut
Membre
Dernière intervention
21 août 2014
1
Bonjour,

suis pas certain d'avoir tout compris mais ton incohérence tu peux la tester simplement avec un left$(ligne,2)="\"

-- Pourquoi faire simple quand on peut faire compliquer --
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
 Bonsoir à tous,
Bonsoir sabyann,

Un peu plus de clarté.
Que veux-tu extraire de ces lignes ?

\\serveur\répertoire\truc\,BIDULE\truc          ,RWXD       RWXD     

\\serveur\répertoire\truc\,BIDULE\Domain Admins      ,all        all      

\\serveur\répertoire\truc\,BIDULE\ZZZ-M              ,RWXD       RWXD     
...

\\serveur\répertoire\machin\,BIDULE\truc    ,RWXD       RWXD     

\\serveur\répertoire\machin\,BIDULE\Administrators      ,all        all      

\\serveur\répertoire\machin\,BIDULE\ZZZ-M              ,RWXD       RWXD

Cette succession de If... Then ... est à proscrire.

jean-marc
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008

Merci pour vos réponses,

J'ai un fichier texte m'indiquant sur chaque ligne (environs 2000)  les comptes ayant des droits sur les répertoires.
En faites, je veux garder les lignes incohérentes. (peut etre peut on le faire en vérifiant si les caracteres entre le 3éme et le 4eme \ de chaque ligne se répetent entre le 5éme et le 6ème?)

\\serveur\répertoire\truc\,BIDULE\truc          ,RWXD       RWXD -> ici tout va bien puisque c'est le compte truc qui a les droits sur son répertoire (à effacer).

\\serveur\répertoire\machin\,BIDULE\truc    ,RWXD       RWXD  ->ici truc à les doits sur le répertoire de machin, donc je veux le faire remonter dans mon fichier texte (à garder).

\\.......

...

Merci de vore aide
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
Bonjour,

Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile(strFichier, 1)
 
Do While Not objTextStream.AtEndOfStream
   arrLine = Split(objTextStream.ReadLine,"")
   If UBound(arrLine) > 2 Then
      If UBound(Filter(arrLine, arrLine(UBound(arrLine)-2))) = 0 Then
         MsgBox arrLine(UBound(arrLine)-2) &vbCrLf&_
                arrLine(UBound(arrLine))
      End If
   End if
Loop
objTextStream.Close

L'utilisation de la fonction Filter, dans ce cas précis, simplifie les tests.

\\serveur\répertoire\truc\,BIDULE\truc          ,RWXD       RWXD
sur cette ligne:
arrLine(UBound(arrLine)-2)) sert à extraire truc
ubound(filter) renvoie 0 si  truc ne se trouve pas 2 fois sur la ligne.

jean-marc
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008

Merci Jean-marc, mais comment je l'applique à mon fichier...
J'ai encore beaucoup de mal avec le developpement en vbscript.sniffff. Mais c'est vraiment très pratique.
et il faut que je récupére un fichier en le SCHEDULENT.
Yann@++
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008

Jean-marc,
Ca fonctionne nikel...
Seulement je n'aarrive pas a l'ecrire dans un fichier texte et chanter le msgbox.
Un grand MERCI.
Messages postés
7
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
18 avril 2008

Jean-Marc,
C'est vraiment du bon boulot et c'est exactement ce que je voulais...
J'espere qu'un jour je pourrais apporter ma pierre a l'édifice comme tu le fais.
Yann