使用 LDAP 过滤器将 get-ADUser 的输出通过管道传输到 Get-ADGroup
Piping output of get-ADUser to Get-ADGroup with an LDAP filter
我正在尝试将两行 PowerShell 拼接在一起,但我就是想不出语法。 a post 听起来可能是我需要的,但它没有使用 -LDAPFilter
。
要生成过去 100 天内创建的 AD 用户列表,我使用
$now = ((Get-Date).AddDays(-100)).Date
$users = Get-ADUser -Filter {whenCreated -ge $now} -Searchbase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" |
Where-Object { $_.Enabled -eq 'True' }
"How to get ALL AD user groups (recursively) with Powershell or other tools?" 中的这段代码执行下一步,即查找用户所属的所有组:
$username = 'd.trump'
$dn = (Get-ADUser $username).DistinguishedName
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) |
select -Expand Name
但我无法将第一个的输出通过管道传输到第二个以获得完整列表。
Get-ADUser -Filter {whenCreated -ge $now} -Searchbase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" |
Where-Object { $_.Enabled -eq 'True' } |
Select-Object DistinguishedName |
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_) |
select -expand Name
错误信息是:
Get-ADGroup : The search filter cannot be recognized
我认为第二个代码片段提取了专有名称并将其提供给过滤器,这就是我在管道中尝试做的事情。
您缺少 ForEach-Object
(别名 %
)。
以下代码应该有效:
Get-ADUser -Filter {whenCreated -ge $now} -SearchBase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" `
| Where-Object { $_.Enabled -eq 'True' } `
| %{Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_.DistinguishedName)} `
| Select-Object -ExpandProperty Name
如果你想同时输出用户和组信息,你可以像这样扩展代码:
Get-ADUser -Filter {whenCreated -ge $now} -SearchBase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" `
| Where-Object { $_.Enabled -eq 'True' } `
| %{$group = Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_.DistinguishedName);Write-Output $_.UserPrincipalName $group.Name}
我正在尝试将两行 PowerShell 拼接在一起,但我就是想不出语法。 a post 听起来可能是我需要的,但它没有使用 -LDAPFilter
。
要生成过去 100 天内创建的 AD 用户列表,我使用
$now = ((Get-Date).AddDays(-100)).Date
$users = Get-ADUser -Filter {whenCreated -ge $now} -Searchbase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" |
Where-Object { $_.Enabled -eq 'True' }
"How to get ALL AD user groups (recursively) with Powershell or other tools?" 中的这段代码执行下一步,即查找用户所属的所有组:
$username = 'd.trump'
$dn = (Get-ADUser $username).DistinguishedName
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) |
select -Expand Name
但我无法将第一个的输出通过管道传输到第二个以获得完整列表。
Get-ADUser -Filter {whenCreated -ge $now} -Searchbase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" |
Where-Object { $_.Enabled -eq 'True' } |
Select-Object DistinguishedName |
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_) |
select -expand Name
错误信息是:
Get-ADGroup : The search filter cannot be recognized
我认为第二个代码片段提取了专有名称并将其提供给过滤器,这就是我在管道中尝试做的事情。
您缺少 ForEach-Object
(别名 %
)。
以下代码应该有效:
Get-ADUser -Filter {whenCreated -ge $now} -SearchBase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" `
| Where-Object { $_.Enabled -eq 'True' } `
| %{Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_.DistinguishedName)} `
| Select-Object -ExpandProperty Name
如果你想同时输出用户和组信息,你可以像这样扩展代码:
Get-ADUser -Filter {whenCreated -ge $now} -SearchBase "OU=staff,OU=SMUC_Users,DC=stmarys,DC=ac,DC=ie" `
| Where-Object { $_.Enabled -eq 'True' } `
| %{$group = Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $_.DistinguishedName);Write-Output $_.UserPrincipalName $group.Name}