Назад | Перейти на главную страницу

Рекурсивное получение домашних каталогов пользователей в PowerShell

Итак, я погружаюсь в PowerShell. Мне было поручено повторить разрешения для каждой домашней папки в домене (не все они попадают в один и тот же подкаталог - это было бы слишком просто). У меня есть пакетный сценарий, который принимает два параметра: имя пользователя и путь к домашней папке и перекачивает их через SetACL.

Я хочу использовать PowerShell для получения имен пользователей и домашних папок для каждого пользователя в OU. Пока я могу получить имена пользователей, но не могу понять, как получить домашние каталоги.

Это моя оболочка PowerShell (заимствованная из различных источников в Интернете):

$Dom = "LDAP://OU=Accounts,DC=myDomain,DC=local"
$Root = New-Object DirectoryServices.DirectoryEntry $Dom

# Create a selector and start searching from the Root of AD
$selector = New-Object DirectoryServices.DirectorySearcher
$selector.SearchRoot = $root
$Selector.pagesize = 20000


# Basically this will only grab user accounts and not computer accounts.
$adobj= $selector.findall() | where {
    $_.properties.objectcategory -match "CN=Person*"
}
foreach ($person in $adobj) {
    $prop=$person.properties
    Write-host "$($prop.cn)"
}

В конечном итоге я собираюсь передать строку Write-host в пакетный файл setACL, но пока я просто пишу вывод, чтобы убедиться, что он точен. Я пробовал добавить$($prop.homeDirectory) в строку Write-host безуспешно.

Любые указатели или предложения?

Microsoft обновила свой модуль PowerShell для Active Directory, и он включен в RSAT. Если вы не хотите использовать сторонние модули, ниже перечислены sAMAaccountName и homeDirectory атрибуты для всех пользователей в OU "JustAnOrgUnit" - почти такие же, как в ответе @nimizen, только без требования Quest.

Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=JustAnOrgUnit,DC=example,DC=com" -Filter * -Property * |
    Select-Object -Property sAMAccountName,homeDirectory |
        Export-CSV -Path C:\somefile.csv

Используйте командлеты Quest AD, они бесплатны и действительно упрощают подобные вещи.

Вы можете получить их от http://www.quest.com/powershell/activeroles-server.aspx

После загрузки попробуйте выполнить следующий сценарий, но также ознакомьтесь с командлетом Get-QADUser.

$csvfile = "C:\somefile.csv"
$root = "OU=Accounts,DC=myDomain,DC=local"
get-qaduser -SearchRoot $root `
-ObjectAttributes @{homeDirectory=’*'} -IncludeAllProperties | `
Select-Object LogonName,HomeDirectory | `
Export-Csv $csvfile