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 e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.