1

我可以使用一些帮助来构建/嵌套以下 powershell 代码来获得所需的结果。

当我使用命令时:

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

它按预期工作,仅从 AD 组中选择人员$groupname,但是当我修改代码并尝试根据创建帐户的时间仅过滤新帐户时,它现在包括不在该组中的用户帐户

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

我不确定为什么它现在在我们的 AD 中包含所有新用户帐户,甚至是组外的一些用户帐户$groupname

4

1 回答 1

2

-Filter在对象中管道时不能使用。如果您在对象中使用管道,Get-ADUser则会假设您想要获取它们。然而,这归结为一个参数绑定错误,因为您已经设置了,所以您-ErrorAction Ignore没有得到应该这样说的错误反馈。

您应该在获取我们知道凭借其组成员身份而存在的 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 添加到结果中。

旁白:尽量不要为-Filter参数使用脚本块。如果您查看Get-ADUser 帮助文档,您会发现该参数实际上是字符串类型的。因此,指定一个脚本块需要在后台进行重铸,并可能导致问题。因此,如果您要-Filter在此项目或其他地方使用该参数,只需使用常规字符串,例如:-Filter "Name -like '*steve*'"

另一个旁白:不能直接在参数中使用[DateTime]诸如返回的A。这可能与 cmdlet 操作 WhenCreated 的 If、when 和方式有关。WhenCreated LDAP 属性的值存储起来更像“20200820040000.Z”,因此您可以调整以分别用作或参数,如下所示:Get-Date-Filter-Filter-LDAPFilter

$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
于 2021-08-19T21:02:46.627 回答