CubanCigarNonExistentFSRM [File Server Resource Manager] to całkiem przydatne narzędzie, jednak braqje w nim jednego, bardzo ważnego raportu – wyszukiwanie plików należących do kont, które już nieistnieją. nie będę zamieszczał Skryptu – pokażę tylko sposób. taki PoC. tym razem potrzebowałem to zrobić na szybko. za jakiś czas pewnie ubiorę to w porządny kod bo zostało mi jeszcze kilka serwerów a póki co ‘sposób na szybko’:

PS C:\scriptZ> ls <dir> -Recurse -ea silentlycontinue | 
%{$fn=$_.fullname;
$size=$_.length;
$owner=(get-acl $fn).owner;
if( $owner -like '*S-1-5-21*' ) {echo "$($fn);$($owner);$($size)"}}|
Out-File C:\temp\nonexistent.csv

 wyjaśnienie

wylistuj całą strukturę rekursywnie. dla każdego elementu z listy zapamiętaj nazwę elementu, rozmiar i pobierz ownera. ownera można sprawdzić przy pomocy polecenia get-ACL. get-ACL automatycznie rozwiązuje nazwy SID na nazwy kont. zatem jeśli nie rozwiąże nazwy [czyli pokaże się jakieś ‘S-1-5-21…’] – user nieistnieje.

całość jest bardzo niedoskonała – to, że nazwa nie została rozwiązana, nie gwarantuje, że konto nieistnieje. mogą być np. problemy z siecią, trustami, nie pamiętam jak się zachowuje dla uprawnień nadanych dla SIDHistory… w środowisq, w którym z tego korzystam takie problemy mnie nie interesują i dopuszczalny jest margines błędu na tego rodzaju scenariusze. całość i tak idzie do analizy biomaszynowej [czyt. istotę żywą].

aby utworzyć z tego skrypt… o to jeszcze sporo roboty. kod jest pasqdnie tymczasowy – braqje parametrów, obsługi błędów a finalnie powinna być zwracana tablica obiektów, żeby można było sobie dalej robić selecty czy inne wynalazki.

uwaga na zaokrąglenia

w pierwszej wersji nie podobało mi się, że wielkość zwracana jest w bytach. w końcu MB są wygodniejsze. i tu pojawia się pytanie – gdzie wstawić zaokrąglenie? ze względów na optymalizację zapytania, wszelkie operacje matematyczne należy umieszczać jak najdalej. ponieważ w kodzie są filtry, to aby liczyć jak najmniej, warto liczyć na minimalnej liczbie obiektów. zmieniłem zatem ‘$($size)’ na ‘$([math]::round($size,2))’. zapytanie zwróciło ok. 25o.ooo wyników. po zsumowaniu wartości liczbowych wyszło mi, że te pliki zajmują w sumie 1.2GB. mało. podejrzanie mało. wpadłem w pułapkę zaokrągleń. postanowiłem zatem nie zaokrąglać, zsumować bajty i dopiero ostateczną wielkość przekonwertować na GB. że będzie różnica to byłem pewny, niemniej skala mnie powaliła. wynik wyszedł powyżej 52GB (SIC!).

eN.

 

Spread the love

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.