Как установить разные домашние каталоги для нескольких OU?

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

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

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

person V. Meijer    schedule 04.04.2016    source источник


Ответы (1)


Если вы создаете сопоставление между OU и домашними каталогами:

$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 ...) {
      ...
    }
  }
}

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

  • Administrators:
    • Full Control (this folder, subfolders and files)
  • SYSTEM:
    • Full Control (this folder, subfolders and files)
  • Authenticated Users:
    • List Folder (this folder only)
    • Создать папки (только эта папка)
    • Запись атрибутов (только для этой папки)
    • Запись расширенных атрибутов (только для этой папки)
  • CREATOR OWNER:
    • Full Control (subfolders and files)

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

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

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

Кроме того, включите перечисление на основе доступа, и ваши пользователи не будут смогут получить доступ только к своему собственному дому, но даже не увидят чужой.

person Ansgar Wiechers    schedule 04.04.2016