Почему запрос Active Directory Home Directory в Get-ADuser отличается от запроса в панели администратора AD? - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел спросить, так как я запрашиваю всех пользователей из AD, чей домашний каталог находится в определенном каталоге из Powershell, с помощью Get-ADuser, и в большинстве случаев он получает нулевой результат.

Запущенный мной запросэто:

$DirectoryInfo = Get-Item \\Fileserver\Users

$strFilter = $DirectoryInfo.FullName.Replace('\','\5c')

$AdUser = Get-AdUser -Filter {homeDirectory -like $strFilter}

echo $AdUser

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

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

Это то, что на панели администратора AD отображается Домашний каталог группы, гдеэтот пользователь принадлежит, например, или просто я запускаю неправильный запрос от Powershell?

Заранее спасибо,

Хуан Пабло.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Я думаю, что поскольку атрибут HomeDirectory отсутствует в выходном наборе по умолчанию, установленном из Get-ADUser, его необходимо добавить к необходимому Properties, а также.
Это может быть частью более крупного сценария, но извопрос, который я не понимаю, зачем вам это нужно:

$DirectoryInfo = Get-Item \\Fileserver\Users
$strFilter = $DirectoryInfo.FullName + '\*'

, поскольку у вас уже есть UNC-путь для домашних каталогов пользователей.

Я не могу проверить это прямо сейчас, но вы могли быпопробуйте так:

$strFilter = '\\Fileserver\Users\*'
$AdUser = Get-AdUser -Filter "HomeDirectory -like $strFilter" -Properties HomeDirectory
$AdUser

или используйте Where-Object, чтобы получить то, что вы хотите:

$strFilter = '\\Fileserver\Users\*'
$AdUser = Get-AdUser -Filter * -Properties HomeDirectory | Where-Object { $_.HomeDirectory -like $strFilter }
$AdUser


Если вы предпочитаете использовать -LDAPFilter вместо -Filter, тогда вам нужно экранировать специальные символы, которые может содержать ваша строка.
*         \2A
(         \28
)         \29
\         \5C
NUL       \00

Вы делаете это, добавляя обратную косую черту \ к каждому из этих символови замену самих символов их ASCII-кодом в шестнадцатеричном виде.( становится \28, обратная косая черта \ становится \5c и т. Д.

Используется небольшая функция для экранирования этих символов для фильтра поиска LDAP:

function Escape-LdapSearchFilter([string] $Filter) {
    return $Filter -creplace '\*', '\2a' `
                   -creplace '\(', '\28' `
                   -creplace '\)', '\29' `
                   -creplace '/' , '\2f' `
                   -creplace '`0', '\00' `
                   -creplace '\\(?![0-9A-Fa-f]{2})', '\5c'
}

$strFilter = Escape-LdapSearchFilter "\\Fileserver\Users\"
# for LDAP you must use the correct attribute name, so `homeDirectory` with a lower-case `h`
$AdUser = Get-AdUser -LDAPFilter "(homeDirectory=$strFilter*)" -Properties HomeDirectory
$AdUser
0 голосов
/ 07 февраля 2019

Я не знаю, что \ 5c делает в этом коде, поэтому, пожалуйста, прости мое невежество.

если \ Fileserver \ Users является корневым каталогом, содержащим домашние каталоги, тогда должен работать следующий код:

$DirectoryInfo = Get-Item \\Fileserver\Users
$strFilter = $DirectoryInfo.FullName + '\*'
$AdUser = Get-AdUser -Filter {homeDirectory -like $strFilter}
$AdUser

Оператору -like нужны звездочки, если ваша строка не является точным соответствием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...