2016-04-04 3 views
1

Я строю скрипт, который проверяет правильность правильного каталога пользователей и если не задан правильный путь. OU-1 имеет различный путь, чем OU-2, и некоторые пользователи являются исключением. Но скрипт не работает.Как te установить разные исходные каталоги для нескольких подразделений?

Это то, что я до сих пор:

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

ответ

1

Если вы создаете отображение между OUs и домашних каталогов:

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

вы можете обработать их, как это:

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

С учетом сказанного, ИМХО много clea нер подход был бы поставить все домашние каталоги под одной акции, настроить (NTFS) разрешения на эту общую папку, как это:

  • Администраторы:
    • Полный доступ (эта папка, вложенные папки и файлы)
  • СИСТЕМА:
    • Полный Cont рол (эта папка, вложенные папки и файлы)
  • Авторизованные пользователи:
    • Список папок (только в этой папке)
    • Создание папок (только эту папку)
    • Запись атрибутов (эту папку только)
    • Запись дополнительных атрибутов (эта папка)
  • СОЗДАТЕЛЬ-ВЛАДЕЛЕЦ:
    • Полный доступ (вложенные папки и файлы)

и отсутствуют домашние каталоги автоматически создаются с помощью простого сценария входа в систему. В партии это выглядело бы примерно так:

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

но вы также можете использовать VBScript или PowerShell.

Включите Access-based Enumeration, и ваши пользователи смогут не только получить доступ только к собственному дому, но и даже не увидеть кого-либо еще.

Смежные вопросы