Jump to content

[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

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...