Я думаю, что поскольку атрибут 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