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

Résolu
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008 - 12 mars 2008 à 16:24
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008 - 14 mars 2008 à 14:58
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

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 mars 2008 à 13:03
 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
3
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mars 2008 à 17:51
-- Pourquoi faire simple quand on peut faire compliquer --
0
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mars 2008 à 17:52
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 --
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
12 mars 2008 à 22:08
 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008
13 mars 2008 à 10:41
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
13 mars 2008 à 13:35
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
0
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008
13 mars 2008 à 15:05
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@++
0
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008
14 mars 2008 à 11:13
Jean-marc,
Ca fonctionne nikel...
Seulement je n'aarrive pas a l'ecrire dans un fichier texte et chanter le msgbox.
Un grand MERCI.
0
cs_sabyann Messages postés 7 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 18 avril 2008
14 mars 2008 à 14:58
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
0
Rejoignez-nous