Code optimalistie: Remove Unknown SID's

Pagina: 1
Acties:

  • CXNeXo
  • Registratie: December 2000
  • Laatst online: 23:24

CXNeXo

This behavior is by design.

Topicstarter
Omschrijving probleem:

Na een flinke migratie die inmiddels bijna afgerond is zijn we blijven zitten met een aantal SID's uit het vorige domein. Onze trust is inmiddels verwijderd, en nu willen we dit definitief gaan opschonen.

Oplossing:

Aangezien alle overgebleven SID's van het "oude" domein niet meer geresolved worden lezen we met het commando "for" alle SID's uit welke vervolgens weggeschreven worden naar een index. Door middel van SubInAcl verwijderen we vervolgens alle SID's die starten met S-1-5-21 (S-1-5-21 is was ons oude domein).

Probleem:

Het is ontzettend traag. Het bouwen van de Index duurt flink lang, het verwijderen van de SID duurt nog veel langer. Onze testserver was 4 dagen aan het stampen over een schamele 15GB.

Tijdens het opbouwen van de Index wordt de CPU volledig dichtgetrokken.

Ik ben geen kei in programmeren, maar dit moet toch sneller kunnen?

Hieronder de code:

code:
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
@echo off
if {%1}=={} @echo Syntax RevokePermSID DriveOrFolder1 [DriveOrFolder2 ... DriveOrFolderN]&goto :EOF
setlocal
set work="%TEMP%\RevokePermSID_%RANDOM%.TMP"
:loop
if {%1}=={} goto finish
set obj=%1
shift
call :findSID %obj%
for /f "Tokens=*" %%a in ('dir %obj% /s /b /a') do (
 call :findSID "%%a"
)
goto loop
:finish
del /q %work%
endlocal
goto :EOF
:findSID
subinacl /outputlog=%work% /nostatistic /File %1
for /f "Tokens=*" %%b in ('type %work%^|FIND "=S-1-5-21"') do (
 for /f "Tokens=1* Delims==" %%c in ('@echo %%b') do (
   for /f "Tokens=1" %%e in ('@echo %%d') do ( 
    subinacl /nostatistic /File %1 /revoke=%%e
   )
 )
)


P.S.

Ik post nooit in programmering, dus als mijn startpost niet helemaal volgens de lay-out is...sorry ;)

MCSE on Windows 2003 & VMware Certified Professional


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
(off topic) waar heb je dit in godsnaam in geprogrammeerd?(/offtopic) 't lijkt wel een batch bestandje

~ Mijn prog blog!


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10 14:25
ik denk ook een batchfile ja. Als ik zo snel kijk zie ik aan het eind 3 for loops in elkaar... da's bijna zeker 't probleem. Ow en die worden ook weer in een for loop aangeroepen...

[ Voor 33% gewijzigd door reddevil op 21-05-2007 10:49 ]


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Tja, het is & blijft een .cmd bestand; performance-wise niet echt super. Misschien helpt het om alles vanaf een RAM-drive te runnen ?

PS: Hoeveel SIDs gaat het in het totaal om ? Als je meer dan 10000 files in 1 dir gooit, wordt de iteratie ervan ook flink trager ... Misschien is het handiger om het in VBScript op te lossen. Al die for-loops zijn natuurlijk ook killing; kun je dat niet handiger oplossen ? B.v. met een dictionairy en afgehandelde items er na afhandeling - maar voor de volgende iteratie - verwijderen ?

[ Voor 59% gewijzigd door SKiLLa op 21-05-2007 10:54 ]

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • CXNeXo
  • Registratie: December 2000
  • Laatst online: 23:24

CXNeXo

This behavior is by design.

Topicstarter
Het is inderdaad een batch bestand. Hier zit ook het probleem in, maar ik weet niet hoe ik deze code moet vertalen naar een andere programmeer taal.

Het gaat om belachelijk veel SID's.

Of een ram drive een oplossing is betwijfel ik. Het gaat om +/- 150 servers waar dit uitgevoerd moet worden.... De batch omturnen naar VBS of een nette executable lijkt me een mooiere oplossing

[ Voor 1% gewijzigd door CXNeXo op 21-05-2007 11:14 . Reden: Count mismatch... ]

MCSE on Windows 2003 & VMware Certified Professional


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Welke taal je ook gaat gebruiken (maar vooral met VBS), je zal het wel 'slim' moeten aanpakken, zodat je zo min mogelijk (en zo goedkoop mogelijke) geneste-loops gebruikt. Heb zelf ook veel bulk-migratie/parsing scripts moeten maken en een beetje handig algo of resource-gebruik scheelt je al heel snel een factor 2~4 of meer.

'Political Correctness is fascism pretending to be good manners.' - George Carlin


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 20:47
Twee mogelijkheden die ik zie om het zonder die loops te doen, dat zal waarschijnlijk sneller zijn:

Als het oude domein nog wel bestaat, alleen de accounts niet meer, dan kun je /cleandeletedsidsfrom en /subdirectories gebruiken met subinacl.

Als het oude domein niet meer bestaat en er niet al te veel accounts waren, dan weer met /subdirectories werken en een hele lijst /revoke opgeven voor alle mogelijke sids van het oude domein (ze zijn oplopend).

Als het toch niet zonder loops kan, dan kun je commandfiles maken, dan gaat subinacl het resolven van de sids cachen, dat zou ook veel tijd moeten schelen, nu gaat subinacl bij elke aanroep opnieuw alle sids resolven.

[ Voor 19% gewijzigd door _js_ op 21-05-2007 11:41 ]


  • CXNeXo
  • Registratie: December 2000
  • Laatst online: 23:24

CXNeXo

This behavior is by design.

Topicstarter
Het oude domein is definitief uit de lucht. Dus /cleansidsfrom gaat niet meer werken.
/revoke met een lijst van SID's is ook geen optie, aangezien we teveel verschillende SID's hebben.

Ik heb voor de grap eens een list gemaakt van alle "oude" SID's en dat was om te huilen.

MCSE on Windows 2003 & VMware Certified Professional


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-11 09:35

leuk_he

1. Controleer de kabel!

Het zal in ieder geval veel helpen als je het per (/sub)directory draait ipv per file. Dan mis je inderdaad wel wat sid die alleen op een extotische file staan, maar daarovoor zou je dan jouw script nog een keer kunnen draaien.

Anders zul je toch een efficicentere taal moeten gebruiken die de security informatie kan opvragen en verandere. (visual basic, C++, maar net wat je kunt vinden dat iemand beheerst)

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.

Pagina: 1