Как установить разные домашние каталоги для нескольких подразделений?
Я создаю сценарий, который проверяет, правильны ли домашние каталоги пользователей, и если не указан правильный путь. 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++
}
1 ответ
Если вы создаете отображение между подразделениями и домашними каталогами:
$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 ...) {
...
}
}
}
С учетом вышесказанного, IMHO гораздо более чистый подход будет заключаться в том, чтобы поместить все домашние каталоги в один общий ресурс, настроить разрешения (NTFS) для этой общей папки следующим образом:
- Администраторы:
- Полный контроль (эта папка, подпапки и файлы)
- СИСТЕМА:
- Полный контроль (эта папка, подпапки и файлы)
- Прошедшие проверку пользователи:
- Папка списка (только эта папка)
- Создать папки (только эта папка)
- Атрибуты записи (только эта папка)
- Записать расширенные атрибуты (только для этой папки)
- ВЛАДЕЛЕЦ СОЗДАТЕЛЬ:
- Полный контроль (подпапки и файлы)
и отсутствующие домашние каталоги, автоматически созданные с помощью простого сценария входа. В пакетном режиме это будет выглядеть примерно так:
if not exist \\server\share\%username% mkdir \\server\share\%username%
но вы также можете использовать VBScript или PowerShell.
Кроме того, включите перечисление на основе доступа, и ваши пользователи не только смогут получить доступ только к своему дому, но и даже не увидят никого другого.