Zarządzanie katalogiem domowym użytkowników AD

Postaram się dziś przedstawić króciutki sposób na zarządzanie atrybutami katalogu domowego użytkowników Active Directory. Rozwiązań jest tutaj dość sporo, chociażby skorzystanie z przystawki „Active Directory Users and Computers”, nie mniej jednak zarządzanie większą liczbą użytkowników aniżeli „kilka” staje się żmudne i nudne. Dlatego to rozwiązanie odrzucamy i przechodzimy do bardziej praktycznych pomysłów. Najlepszym rozwiązaniem (wg mnie) jest wykorzystanie PowerShella.

Tutaj również mamy kilka możliwych ścieżek postępowania, a najbardziej praktyczne to:
• Natywny moduł ActiveDirectory
• ActiveDirectory provider
• Moduł Quest Software dla AD
• Czy mój ulubiony interfejs ADSI

Najprostszym rozwiązaniem jest użycie natywnego modułu Active Directory dla PowerShella.

$Identity = "mg"
$HomeDirectory = "\\serwerplikow\sciezka"
$HomeDrive = "H:"

Import-Module ActiveDirectory
Set-ADUser -Identity $Identity -HomeDirectory $HomeDirectory -HomeDrive $HomeDrive

HomeDir1

Należy pamiętać jednak, iż w przeciwieństwie do konsoli ADUC polecenie to nie tworzy automatycznie folderu użytkownika, dlatego należy utworzyć go ręcznie, ale o tym później.

W celu zdjęcia tych wartości tych atrybutów posługujemy się analogicznie:

Set-ADUser -Identity $Identity -HomeDirectory $null -HomeDrive $null

Analogicznie sprawa się tyczy rozwiązania z użyciem modułu Quest Software:

Add-PSSnapin Quest.ActiveRoles.ADManagement
Set-QADUser -Identity $Identity -HomeDirectory $HomeDirectory -HomeDrive $HomeDrive
Set-QADUser -Identity $Identity -HomeDirectory $null -HomeDrive $null

HomeDir2

Wracając jeszcze do natywnego modułu PowerShella – ActiveDirectory. Załadowanie tego modułu daje dostęp do alternatywnej formy nadania wartości do atrybutów obiektu użytkownika, a mianowicie poprzez wykorzystanie providera ActiveDirectory.
Samo nadawanie wartości atrybutów obiektu użytkownika jest odmienne aniżeli w dwóch powyższych przykładach. Można je porównać do nadawanie np. wartości w rejestrze. Różnicą jest również sposób wskazywania obiektu, a mianowicie poprzez podanie pełnej wartości atrybutu distinguishedName, zamiast identyfikatora konta.

$DN = "CN=Michal Gajda,OU=Test,DC=contoso,DC=com"

Set-ItemProperty -Path AD:\$DN -Name homeDirectory -Value $HomeDirectory -Force
Set-ItemProperty -Path AD:\$DN -Name homeDrive -Value $HomeDrive -Force

Usuwanie wartości odbywa się analogicznie ja nadawanie z tym wyjątkiem iż wykorzystujemy cmdlet Clear-ItemProperty.

Clear-ItemProperty -Path AD:\$DN -Name homeDirectory -Force
Clear-ItemProperty -Path AD:\$DN -Name homeDrive -Force

HomeDir3

Ostatnim prezentowanym rozwiązaniem jest mój ulubiony sposób. Głównie dlatego, gdyż jest uniwersalny, tzn. nie wymaga żadnych dodatkowych modułów, a co za tym idzie możemy go wykorzystać praktycznie wszędzie, gdzie tylko mamy PowerShella wraz z odpowiednim dostępem.

Mianowicie definiujemy ścieżkę do obiektu w postaci pełnej wartości atrybutu distinguishedName i wykorzystujemy interfejs [ADSI]. Alternatywą może być również wyszukiwanie obiektów z użyciem akceleratoar [ADSISearcher].

$DN = "CN=Michal Gajda,OU=Test,DC=contoso,DC=com"
$ADUser = [ADSI]"LDAP://$DN"

Następnie z wykorzystaniem metody Put wprowadzamy żądane wartości atrybutów i zatwierdzamy całość metodą obiektu SetInfo().

$ADUser.Put("homeDirectory", $HomeDirectory)
$ADUser.Put("homeDrive", $HomeDrive)
$ADUser.SetInfo()

Usuwanie wartości odbywa się podobnie jednakże tutaj konieczne jest użycie rozszerzonej metody PutEx, gdzie jako pierwszy parametr wskazujemy tryb pracy czy ADS_PROPERTY_CLEAR.

$ADS_PROPERTY_CLEAR = 1
$ADUser.PutEx($ADS_PROPERTY_CLEAR, "homeDirectory", $null)
$ADUser.PutEx($ADS_PROPERTY_CLEAR, "homeDrive", $null)
$ADUser.SetInfo()
[ADSI]"LDAP://$DN" | Select-Object homeDirectory, homeDrive

HomeDir4

Jest jeszcze jedna alternatywa z wykorzystaniem klas .NETa, ale prócz innej formy dowiązania do obiektu użytkownika dalsza część modyfikacji atrybutów działa na tej samej zasadzie.

$ADUser = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$DN")

Wszystkie te metody mają jedną zasadniczą wade, nie tworzą automatycznie katalogu użytkownika. Jednakże w dla PowerShella nie jest to żaden problem, tworzymy wskazany katalog.

New-Item -Path $HomeDirectory -ItemType Directory –Force

Definiujemy odpowiednie uprawnienia – jeśli to jest katalog domowy to najlepiej by użytkownik miał pełne prawa dostępu.

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule `
($ADUser.userPrincipalName,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")

Następnie nadajemy uprawnienia.

$Acl = Get-Acl $HomeDirectory
$acl.SetAccessRule($AccessRule)
$Acl | Set-Acl

Najlepiej wyłączyć dziedziczenie uprawnień z folderu nadrzędnego.

$Acl = Get-Acl $HomeDirectory
$Acl.SetAccessRuleProtection($true,$true)
$Acl | Set-Acl

Oraz usuwamy ewentualne niepożądane konta, np. Authenticated Users.

$Acl = Get-Acl $HomeDirectory
$Acl.Access | ?{$_.IdentityReference -eq "NT AUTHORITY\Authenticated Users"} | %{$Acl.RemoveAccessRule($_)}
$Acl | Set-Acl
Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s