Возникли проблемы с фильтрацией Get-ADUser с помощью команды whenCreated powershell

Я могу использовать некоторую помощь в структурировании / вложении приведенного ниже кода PowerShell, чтобы получить желаемый результат.

Когда я использую команду:

      Get-ADGroupMember -Identity $groupname | 
    Get-ADUser -Properties * -Erroraction Ignore | 
        select @{N='UserName';E={$_.UserPrincipalName}} | 
            Export-csv $filename -NoTypeInformation

Он работает, как ожидалось, и выбирает только людей из группы AD, но когда я изменяю код и пытаюсь отфильтровать только НОВЫЕ учетные записи в зависимости от того, когда была создана учетная запись, теперь он включает учетные записи пользователей, которые НЕ входят в эту группу.

      Get-ADGroupMember -Identity $groupname | 
    Get-ADUser -Filter { whenCreated -ge $when } -Properties * -Erroraction Ignore | 
        select @{N = 'UserName'; E = { $_.UserPrincipalName } } | 
            Export-csv $filename -NoTypeInformation

Я не уверен, почему он теперь включает все новые учетные записи пользователей в нашу AD, даже некоторые из них вне группы $groupname

1 ответ

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

У вас должны возникнуть проблемы с получением пользователей AD, которые, как мы знаем, существуют в силу их членства в группах. Итак, я бы спросил, действительно ли вам нужно игнорировать ошибки. Тем не менее, удаление -ErrorAction Ignoreне решит проблему привязки параметров. Для этого, боюсь, вам придется прибегнуть к постфильтрации с Where{}пункт. Например:

      $When = (Get-Date "12/31/2020").ToUniversalTime()

Get-ADGroupMember -Identity $groupname | 
Get-ADUser -Properties WhenCreated | 
Where-Object{ $_.WhenCreated -ge $when }
Select-Object @{Name = 'UserName'; Expression = { $_.UserPrincipalName } } | 
Export-csv $filename -NoTypeInformation

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

Примечание: вам не нужно получать все свойства. UserPrincipalName входит в набор по умолчанию. Для постфильтрации вам нужно будет добавить к результатам WhenCreated.

Замечание: старайтесь не использовать блоки сценария в качестве аргумента. Если вы посмотрите справочную документацию Get-ADUser, то обнаружите, что этот параметр на самом деле является строковым. Таким образом, указание блока сценария требует переделки под капотом и может привести к проблемам. поэтому, если вы использовали параметр в этом проекте или где-либо еще, просто используйте обычную строку, например: -Filter "Name -like '*steve*'"

Другой в сторону: A [DateTime] например, возвращенный Get-Dateнельзя напрямую использовать в аргументе. Вероятно, это связано с If, когда и как командлет управляет WhenCreated. Значение атрибута WhenCreated LDAP больше похоже на "20200820040000.Z", поэтому вы можете настроить его для использования в качестве -Filter или аргумент соответственно, как показано ниже:

      $when = (Get-Date '8/20/20' ).ToUniversaltime().ToString('yyyMMddHHmmss.Z')

Get-ADUser -Filter "WhenCreated -ge '$when'"

Или с -LDAPFilter

      Get-ADUser -LDAPFilter "(whencreated>=$when)"

Я свяжусь с документацией по фильтруемым свойствам, если смогу ее найти.

Обновлять:

Судя по комментариям @SantiagoSquarzon, вы можете не захотеть использовать Get-ADGroupMember вообще, поскольку вы можете передавать непользовательские объекты в Get-ADUser. Комбинируя его предложение, можно получить такой пример:

      $when = (Get-Date '8/20/20' ).ToUniversaltime().ToString('yyyMMddHHmmss.Z')

$groupDN = (Get-ADGroup -Identity $groupname).DistinguishedName

Get-ADUser -LDAPFilter "(&(memberOf=$groupDN)(whencreated>=$when))" | 
Select-Object @{Name = 'UserName'; Expression = { $_.UserPrincipalName }} | 
Export-csv $filename -NoTypeInformation
Другие вопросы по тегам