2016-04-04 18 views
1

Kullanıcıların ev adreslerinin doğru olup olmadığını ve doğru yolu ayarlamamış olup olmadığını denetleyen bir komut dosyası yapıyorum. OU-1, OU-2'den farklı bir yola sahiptir ve bazı kullanıcılar bir istisnadır. Ama senaryo çalışmıyor.Çoklu OU'lar için farklı homedirectories nasıl ayarlanır?

$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++ 
} 

cevap

1

Eğer OU ve ev dizinleri arasında bir eşleme oluşturursanız:

$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' 
} 

böyle bunları işleyebilir:

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

Bu

Bugüne kadar ne var

Bununla birlikte, bir IMHO çok clea dedi

  • Yöneticiler:
    • Tam Denetim (bu klasör, alt klasörler ve ner yaklaşım böyle bu paylaşılan klasöre (NTFS) izinlerini, tek pay altındaki tüm ev dizinleri koymak ayarlamak olacaktır dosyaları)
  • SİSTEMİ:
    • Tam Katkı rol (bu klasör, alt klasörler ve dosyalar)
  • Kimliği doğrulanmış kullanıcılar:
    • Liste Klasör (bu klasör için)
    • (Bu klasörü (bu yalnızca klasör)
    • Yaz Öznitelikler'i Klasör Oluştur sadece)
    • Yaz Genişletilmiş Özellikler (bu klasör yalnızca)
  • OLUŞTURAN SAHİBİ:
    • Tam Denetim (alt klasörler ve dosyalar)

ve eksik ev dizinleri otomatik basit bir oturum açma komut dosyası ile yarattık.

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

ama sadece yanı VBScript veya PowerShell kullanabilirsiniz: toplu olarak bu benzeyecektir.

Bunun üstüne Access-based Enumeration'u etkinleştirin ve kullanıcılarınız yalnızca kendi evlerine erişemeyecek, aynı zamanda başkalarının kimseyi görmeyeceklerdir.

İlgili konular