Skocz do zawartości
Ralliart

[Powershell] Skrypt do zmiany nazwy katalogu dla zwolnionego pracownika

Recommended Posts

Całkiem niedawno stanąłem w obliczu szybkiego przejrzenia zasobów Active Directory pod kątem wyłączonych kont i zrobienia porządków na udziale sieciowym na którym są udostępnione foldery użytkowników. Ponieważ praktycznie od wdrożenia usług poprzez terminal serwer nikt nic z tym nie robił było sporo rzeczy do poprawki. Oczywiście całą pracę można wykonać ręcznie, ale pytanie po co? Łatwiej posłużyć się skryptem w powershell który zrobi to za nas :) 1. Listowanie wyłączonych kont dla konkretnego oddziału firmy

Get-ADUser -Filter 'enabled -eq $false' -SearchBase “OU=Users,OU=OUOddział,DC=Firma“ 

Jeżeli pominiemy ograniczenie oddziału dostaniemy listę wszystkich wyłączonych kont w AD, a tego nie chcemy, dlatego zawężamy kryteria wyszukiwania. Dzięki temu zapytaniu mamy coś takiego

DistinguishedName : CN=nazwa_usera,OU=Users,OU=OUOddział,DC=FirmaEnabled           : FalseGivenName         : xxxxxName              : xxxxxObjectClass       : userObjectGUID        : 76279cff-e635-xxxxx-b3ff-xxxxxxSamAccountName    : xxxxxxxxxSID               : S-1-5-21-xxxxxxxx-1726128142-xxxxxx-12760Surname           : xxxxxxUserPrincipalName : xxxxx@domena.com

jak dla nas nieco za wiele danych, więc je ograniczamy:

Get-ADUser -Filter 'enabled -eq $false' -SearchBase “OU=Users,OU=OUOddział,DC=Firma“ | Select Name, GivenName, Surname

Wynikiem tego działania jest lista:LOGIN (jak i też nazwa homedirectory), Imię, nazwisko 2. Mając tak przygotowaną listę możemy już przystąpić do właściwej analizy udziału z katalogami użytkowników Test czy lokalizacja istnieje: 

Test-Path -path serwerudział$nazwa_katalogu

Jest to o tyle istotne, że nie wiemy czy katalog został założony, a jeżeli tego nie sprawdzimy powłoka będzie nam niepotrzebnie zwracać komunikaty o błędach. Rozwiązujemy ten problem prostą pętlą

ForEach-Object {$username = $_.name; if (Test-Path -path serwerudział$$username) {Write-Host "Directory OK " $username $_.givenname $_.surname} Else {Write-Host "Directory Not exists " $username $_.givenname $_.surname} }

Jak widać w przykładzie powyżej podałem już nazwy zmiennych których użyłem w poleceniu ($username, $_.givenname, $_.surname, - odpowiadają one Select Name, GivenName, Surname). 3. Oczywiście nazwy katalogów trzeba zmieniać (jeżeli istnieją)

rename-Item -Path serwerudział$$username -NewName serwerudział$ARCHIWUM_$username;

Poruszanie się na udziałach za pomocą odwołań do serwera (serwerudział$) znacząco ułatwia sprawę - nie zawsze mamy czas na mapowanie wszystkich potrzebnych udziałów. W Windowsie mamy możliwość przypisania tylko 24 liter dla nazw dysków, więc posiadanie sporej liczby udziałów mocno komplikuje sprawę, gdy trzeba wykonać taką operację na kilku lokalizacjach. 4. Składamy wszystko do kupy i otrzymujemy:

Get-ADUser -Filter 'enabled -eq $false' -SearchBase “OU=Users,OU=OUOddział,DC=Firma“ | Select Name, GivenName, Surname | ForEach-Object {$username = $_.name; if (Test-Path -path serwerudział$$username) {rename-Item -Path serwerudział$$username -NewName serwerudział$ARCHIWUM_$username; Write-Host "Directory OK " $username $_.givenname $_.surname} Else {Write-Host "Directory Not exists " $username $_.givenname $_.surname} } 

I mamy pracę z głowy. Warto przy tym wspomnieć o tym, że mamy możliwość wyeksportowania naszych działań do pliku, w tym celu dodajemy na końcu

| Out-File -filepath "C:log.txt"

Oczywiście wymaga to drobnej zmiany w skrypcie

Write-Host

zmieniamy na

Write-Output

Jeżeli tego nie zrobimy wynik działania skryptu zobaczymy tylko w konsoli, a plik tekstowy pozostanie pusty

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą dodawać komentarze

Dodaj konto

Załóż nowe konto. To bardzo proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się teraz

×