2016-04-04 20 views
1

Ich baue ein Skript, das überprüft, ob das Homedirectory der Benutzer korrekt ist und wenn nicht den richtigen Pfad festgelegt. OU-1 hat einen anderen Pfad als OU-2 und einige Benutzer sind eine Ausnahme. Aber das Skript funktioniert nicht.Wie legen Sie verschiedene Hauptverzeichnisse für mehrere Organisationseinheiten fest?

Das ist, was ich bisher habe:

$folderpath = "\\172.16.32.27\gebruikers\homedir\", "\\172.16.32.27\share\homedirectories\" 
$homedrive = "H" 
$SearchBase = "OU=test,DC=Test,DC=org", "OU=users,DC=Test,DC=org" 
$domain  = "test.org" 
$excludes = @("test", "user22") 
$i = 0 

$filter3 = "homedirectory -notlike '$("$homepath[$i]")' -and samaccountname -ne '$($excludes -join "' -and samaccountname -ne '")'" 

$SearchBase | foreach { 
    Get-ADUser -SearchBase $_ -Filter $filter3 -Properties HomeDirectory, UserPrincipalName, Homedrive, samaccountname | % { 
     $homedirectory = "$($folderpath[$i])$($_.SamAccountName)" 

     if (!(Test-Path -Path $homedirectory)) { 
      New-Item -Type Directory -Path $homedirectory 

      $acl = Get-Acl -Path $homedirectory 

      $permission = $_.UserPrincipalname, 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow' 
      $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission 
      $acl.SetAccessRule($rule) 

      $permission = "$domain\Domain Admins", 'FullControl', 'ContainerInherit, ObjectInherit', 'None', 'Allow' 
      $rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $permission 
      $acl.SetAccessRule($rule) 

      Set-Acl -Path $homedirectory -AclObject $acl 
      Set-ADUser $_ -HomeDirectory "$homedirectory" -HomeDrive $homedrive 
     } elseif ($_.HomeDirectory -ne "$homedirectory*" -or $_.Homedrive -ne "$homedrive") { 
      Set-ADUser $_ -HomeDirectory "$homedirectory" -HomeDrive $homedrive 
     } 
    } 
    $i++ 
} 

Antwort

1

Wenn Sie eine Zuordnung zwischen Organisationseinheiten und Home-Verzeichnisse erstellen:

foreach ($ou in $SearchBase) { 
    Get-ADUser -SearchBase $ou ... | ForEach-Object { 
    $homedirectory = Join-Path $homeShares[$ou] $_.SamAccountName 
    if (Test-Path ...) { 
     ... 
    } 
    } 
} 
:

$homeShares = @{ 
    'OU=test,DC=Test,DC=org' = '\\172.16.32.27\gebruikers\homedir' 
    'OU=users,DC=Test,DC=org' = '\\172.16.32.27\share\homedirectories' 
} 

Sie sie so verarbeiten kann,


Mit dem gesagt, ein IMHO viel clea ner Ansatz wäre es, alle Home-Verzeichnisse unter einer einzigen Aktie zu setzen, stellen Sie die (NTFS) Berechtigungen für den freigegebenen Ordner wie folgt aus:

  • Administratoren:
    • Vollzugriff (Diesen Ordner, Unterordner und Dateien)
  • SYSTEM:
    • Voll Cont rol (Dieser Ordner, Unterordner und Dateien)
  • authentifizierte Benutzer:
    • Ordner auflisten (dieser Ordner nur)
    • Ordner erstellen (diesen Ordner nur)
    • schreiben Attribute (diesen Ordner nur)
    • schreiben Erweiterte Attribute (dieser Ordner nur)
  • Ersteller-Besitzer:
    • Vollzugriff (Unterordner und Dateien)

und haben fehlende Home-Verzeichnisse automatisch mit einem einfachen Anmeldeskript erstellt. Im Batch würde es ungefähr so ​​aussehen:

if not exist \\server\share\%username% mkdir \\server\share\%username% 

aber Sie könnten auch VBScript oder PowerShell verwenden.

Aktivieren Sie Access-based Enumeration darüber hinaus, und Ihre Benutzer werden nicht nur in der Lage sein, nur auf ihr eigenes Haus zuzugreifen, sondern auch nicht sehen, jemand anderes.