gymedu
Goto Top

Fehlender Dateiabgleich nach Anlegen von AD-Usern mit PowerShell

Hallo zusammen,
ich habe ein kleines Script geschrieben, um in einer Datei gespeicherte neue User im AD aufzunehmen. Das ganze soll auf einem Windows Server 2019 und Windows 10 Clients laufen. Das Script läuft auch fehlerfrei und legt die User weitgehend ordnungsgemäß an.
Hier zunächst das Script und dann meine Frage

<#Userdaten in einer Textdatei in folgender Form
  blobib0101;Bibi;Blocksberg;Dadada01
  Diese Daten werden in $NewADUsers eingelesen und anschließend hieraus der neue Account kreiert
#>

# Hier der Teil für das Erzeugen des neuen Accounts:

foreach ($User in $NewADUsers)
{ if ($User -ne "") {  
    $Spalten     = $User.Split(";")  
    $Username    = $Spalten
    $Firstname   = $Spalten[1]
    $Lastname    = $Spalten[2]
    $Password    = ConvertTo-SecureString $Spalten[3] -AsPlainText -Force       
    $Department  = "gruppe_test"  
    $OU          = "test"  
       
    #Check if the user account already exists in AD
    if (Get-ADUser -Filter {SamAccountName -eq $Username}) {
       Write-Warning "Ein UserAccount $Username existiert bereits im Active Directory."  
    }
    else {
       $nADName = "$Firstname $Lastname"  
       $dADName = "$Firstname $Lastname"  
       $uADName = "$Username@<Domänenname>"  
       $fullPath = "<Angabe des UNC-Pfades auf dem Server>\$Username"  
       $driveLetter = "U:"  
 
       New-ADUser -SamAccountName $Username `
                  -UserPrincipalName $uADName `
                  -Name $nADName `
                  -GivenName $Firstname `
                  -Surname $Lastname `
                  -Enabled $True `
                  -ChangePasswordAtLogon $false `
                  -DisplayName $dADName `
                  -Department $Department `
                  -Path "OU=test,DC=...,DC=..." ` # Angabe von OU und DC  
                  -AccountPassword $Password `
                  -HomeDrive $driveLetter `
                  -HomeDirectory $fullPath     

       # User zur lokalen Guppe hinzufügen
       Add-ADGroupMember -Identity gruppe_test -Members ($Username) –Verbose

       # Homeverzeichnis anlegen nach 
       # https://www.active-directory-faq.de/2016/01/powershell-home-directory-anlegen-und-      
       #  berechtigungen-vergeben/ 
    
       $actUser = Get-ADUser -Identity $Username
       Set-ADUser $Username -HomeDrive $driveLetter -HomeDirectory $fullPath 
       $homeShare = New-Item -Path $fullPath -ItemType Directory -Force
       $acl = Get-Acl $homeShare
       $FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"  
       $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow
       $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"  
       $PropagationFlags = [System.Security.AccessControl.PropagationFlags]"InheritOnly"  
       $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(`
                     $actUser.SID,$FileSystemRights,$InheritanceFlags,$PropagationFlags,`
                     $AccessControlType)
       $acl.AddAccessRule($AccessRule)
       Set-Acl -Path $homeShare -AclObject $acl    
       }
  }
}

Nun die Einschränkung und meine Frage:
Das Homeverzeichnis auf dem Server wird ordnungsgemäß angelegt, der User sollte dieses dann als Netzlaufwerk U: sehen und seine Profildaten dort gespeichert werden.
1) Leider ist weder das Netzlaufwerk U: vom Client aus zugänglich, noch
2) erfolgt ein Abgleich der lokal erzeugten Dateien oder des Desktops.
Vlt. kann mir jemand mit mehr PowerShell-Kenntnissen helfen den Fehler zu finden und zu beseitigen.
Vorab vielen Dank für die Möglichkeiten, die man hier hat.

Content-ID: 2978148339

Url: https://administrator.de/contentid/2978148339

Ausgedruckt am: 19.11.2024 um 11:11 Uhr

SlainteMhath
SlainteMhath 03.06.2022 um 13:39:43 Uhr
Goto Top
Moim.

1) Leider ist weder das Netzlaufwerk U: vom Client aus zugänglich, noch
Bedeutet?
Laufwerk nicht gemappt oder Fehlermeldung beim Zugriff bzw. fehlende Rechte?
Geht denn der Zugriff via UNC?

2) erfolgt ein Abgleich der lokal erzeugten Dateien oder des Desktops.
Das hat auch mit dem HomeDrive nix zu tun. Das macht man entweder per Folder Redirection (per GPO) oder per RoamingProfile.

lg,
Slainte
gymedu
gymedu 03.06.2022 um 15:10:29 Uhr
Goto Top
Zunächst danke für die Rückmeldung

Zu 1) Per UNC habe ich es noch nicht probiert. Fehlgeschlagen ist z.B. Explorereinsatz oder mit cmd. Wie mappt man ein Verzeichnis per PowerShell, wäre also die erste Frage. Die Rechte muss ich ebenfalls nochmal überprüfen, obwohl ja in Zeile 57, der Zugriff auf Modify gesetzt wurde. Übrigens bringt auch ein Wechsel auf vollen Zugriff keine Änderung.

Zu 2) Unser altes Script (VBA) hatte einen ähnlichen Aufbau und dort wurde das Laufwerk U: gemappt. RoamingProfile wollte ich nicht verwenden, da sie auch bisher nicht im Einsatz waren. Die OU test hat übrigens noch andere Netzlaufwerke und die werden gemappt und sind voll zugänglich.
Ich kann erst am Dienstag weiter testen und werde dann berichten. Bin für jeden Tipp dankbar.

Beste Grüße
gymedu
gymedu 07.06.2022 um 18:07:02 Uhr
Goto Top
Folgende leider noch nicht zielführende Änderungen habe ich durchgeführt:

Vorweg möchte ich anmerken, dass ich die jeweiligen User mehrfach gelöscht, oder auch die eingelesenen Daten variiert habe, so dass Dopplungen als Fehlerursache ausscheiden.

1) Ausschluss fehlendes Mapping, hierzu wurde hinter Zeile 63 eingefügt

New-SMBMapping -Localpath $driveLetter -Remotepath $fullPath -persistent $true

Ergebnis: Kein Zugriff auf das existierende und gemappte Netzlaufwerk. Die Analyse der Rechte des Home-Ordners auf dem Server ergab

Name Berechtigungsebene
Administrator Lesen/Schreiben
Administratoren Besitzer
blobib0101 Spezielle Berechtigungen

Manuell habe ich die Berechtigungsebene für den User blobib0101, wie bei anderen funktionierenden Accounts auf Lesen/Schreiben gesetzt. Dies lieferte das gewünschte Ergebnis, also das gemappte und zugreifbare Netzlaufwerk U.

2) Ergo könnte die Zeile 54

$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"Modify"  

die Fehlerursache sein. Deshalb Änderung auf

$FileSystemRights = [System.Security.AccessControl.FileSystemRights]"FullControl"  

Das führt zwar dazu, dass die Berechtigungsebene jetzt - wie gewünscht - zu

Name Berechtigungsebene
...
blobib0101 Lesen/Schreiben

geändert wird. Dies ist exakt der gleiche Zustand wie bei bereits bestehenden und funktionierenden Usern. Aber die Rechte für den User auf das Netzlaufwerk U - egal ob als UNC-Pfad oder nicht - sind bei Anmeldung nicht vorhanden.
Meldung: (UNC-Pfad steht für den korrekten im Programm angegebenen Pfad)

Auf \\UNC-Pfad konnte nicht zugegriffen werden
Sie haben keine Berechtigung für den Zugriff auf UNC-Pfad

Außerdem wird die Ausführung des New-SMBMapping Befehls verweigert, weil bereits ein entsprechendes Objekt existiert.

Ich bin ein wenig ratlos und weiß mit meinen bescheidenen PowerShell-Kentnissen nicht mehr weiter.

Das alte Script zur automatischen Erzeugung von Useraccounts hatte bzgl. der Rechtevergabe des Homeverzeichnisses folgendes Aussehen:

md D:\daten\test\home\%1
echo J | cacls D:\daten\test\home\%1 /C /E /G Administratoren:F
echo J | cacls D:\daten\test\home\%1 /C /E /G Domäne\%1:F
echo J | cacls D:\daten\test\home\%1 /C /E /R Jeder

Hier wurde kein UNC-Pfad verwendet, was aber eigentlich keinen Unterschied machen sollte.

Ich hoffe, mir kann jemand helfen, meinen Fehler zu finden.
Vielen Dank fürs Lesen und beste Grüße
SlainteMhath
SlainteMhath 08.06.2022 um 09:33:06 Uhr
Goto Top
1) Ausschluss fehlendes Mapping, hierzu wurde hinter Zeile 63 eingefügt
Was macht das denn für einen Sinn im User-Anlage Script ein LW zu mappen?!

Und das hier:
Sie haben keine Berechtigung für den Zugriff auf UNC-Pfad
ist die Wurzel deines Problems. Kein Zugriff auf den UNC == kein gemapptes Laufwerk.

Manuell habe ich die Berechtigungsebene für den User blobib0101, wie bei anderen funktionierenden Accounts auf Lesen/Schreiben gesetzt. Dies lieferte das gewünschte Ergebnis, also das gemappte und zugreifbare Netzlaufwerk U.
Dann setz doch die Rechte im Script auf aus R/W, dann sollte das doch passen.
gymedu
gymedu 08.06.2022 um 10:52:57 Uhr
Goto Top
Ok, vielen Dank für die Rückmeldung. Ich dachte, die Setzung der FileSystemRights auf "FullControl" würde das beinhalten. Schon für "Modify" gilt laut Microsoft:
Modify 197055
Gibt die Berechtigung an, den Inhalt eines Ordners zu lesen, zu schreiben und aufzulisten, Dateien und Ordner zu löschen und Anwendungsdateien auszuführen. Diese Berechtigung schließt die Berechtigungen ReadAndExecute, Write und Delete ein.
Dann werde ich mit anderen Einstellungen weiter testen.
SlainteMhath
SlainteMhath 08.06.2022 um 10:55:36 Uhr
Goto Top
Mag sein, du hast aber

blobib0101 Spezielle Berechtigungen

auf dem Ordner, oder?
gymedu
gymedu 08.06.2022 um 12:38:04 Uhr
Goto Top
Genau, auf dem Ordner auf dem Server
gymedu
gymedu 09.06.2022 um 13:07:36 Uhr
Goto Top
Leider ist Thema noch nicht erledigt.
In Zeile 54 setze ich statt "Modify" auf "FullControl"
Wenn ich auf die Eigenschaften des Home-Ordners auf dem Server unter Freigabe gehe, steht dort unter dem angelegten Usernamen die Berechtigungsebene Lesen/Schreiben.
Wenn ich aber den User am Client anmelde, habe ich keine Rechte den Home-Ordner auf dem Server zu öffnen, folglich ist auch das Mapping auf U: erfolglos.
Klicke ich aber jetzt serverseitig auf den Button Freigabe - egal ob ich einen Namen auswähle oder nicht - so sind alle Rechte gegeben und der Home-Ordner U: steht frei zur Verfügung.
Hier ein Screenshot von meinem Laptop um zu verdeutlichen welchen Button ich meine, da ich momentan nicht in unserem Netz bin.
test
Die Frage ist doch wohl nur, wie ich diesen Klick mit PowerShell ausführen kann. Wer kann mir hier auf die Sprünge helfen?

Beste Grüße@SlainteMhath
SlainteMhath
SlainteMhath 09.06.2022 um 15:42:30 Uhr
Goto Top
Dir ist klar, des es unterschiedliche Rechte für die Freigabe und das darunterliegende Dateisystem gibt, ja?

Und: du gibst ja nicht alle Userordner einzeln frei, sondern i.d.R. ein Verzeicinis auf dem Server in dem dann alle User Homes liegen

Freigabe: \\server\home (=Auf dem Dateisystem: d:\home)
Freigabe-Rechte: jeder: lesen/schreiben


Eintrag im AD-User
HomeDrive U:
HomePath \\Server\home\%usernanme%
=Auf dem Dateisystem: d:\home\%username%, dort %username%: lesen/schreiben, admin: lesen/schreiben und Vererbung aus.
gymedu
gymedu 09.06.2022 um 21:58:41 Uhr
Goto Top
Entschuldigung, dass ich in diesem Bereich noch Lücken habe.
Dir ist klar, des es unterschiedliche Rechte für die Freigabe und das darunterliegende Dateisystem gibt, ja?
Nein, das ist mir noch nicht vollständig klar, da ich mich erst Stück für Stück in die Thematik einarbeite. Gemeint sind wohl NTFS-Berechtigungen und Freigabeberechtigungen (vgl. hier)
Ich werde die angegebenen Hinweise zunächst umsetzen und dann hoffentlich das missing link finden.

Freigabe: \\server\home (=Auf dem Dateisystem: d:\home)
Freigabe-Rechte: jeder: lesen/schreiben

Die Freigabe müsste eigentlich so schon bestehen

Eintrag im AD-User
HomeDrive U:
HomePath \\Server\home\%usernanme%
=Auf dem Dateisystem: d:\home\%username%, dort %username%: lesen/schreiben, admin: lesen/schreiben und Vererbung aus.

Wo im Script wird denn etwas anderes gemacht?

Zunächst aber vielen Dank für die Nachhilfe.
gymedu
Lösung gymedu 14.06.2022 um 18:20:02 Uhr
Goto Top
Manchmal muss man seine Probleme selbst lösen, hilft bei den nächsten.
Nach einigem Testen, habe ich gemerkt, dass der User zwar keinen Zugriff auf sein Homeverzeichnis - im Script mit $homeShare bezeichnet - hat, wohl aber auf Unterordner oder einzelne Dateien. Die Ursache liegt in Zeile 57

$PropagationFlags = [System.Security.AccessControl.PropagationFlags]"InheritOnly"  

Diese Einstellung bewirkt laut Microsoft

InheritOnly 2
Gibt an, dass der ACE nur an untergeordnete Objekte weitergegeben wird. Dies schließt untergeordnete Container- und Endobjekte ein.

Der dann zuoberst liegende Ordner $homeShare ist folglich nicht für den User zugänglich und kann auch nicht gemappt werden. Es gibt aber noch eine weiter Einstellung

None 0
Gibt an, dass keine Vererbungsflags festgelegt sind.

Ändert man Zeile 57 jetzt wie folgt ab

$PropagationFlags = [System.Security.AccessControl.PropagationFlags]::None

So läuft alles wie gewünscht. Dank an Board Veteran.
Damit kann ich den Beitrag auf gelöst setzen.