【问题标题】:Piping output of get-ADUser to Get-ADGroup with an LDAP filter使用 LDAP 过滤器将 get-ADUser 的输出通过管道传输到 Get-ADGroup
【发布时间】:2017-12-13 22:13:12
【问题描述】:

我正在尝试将两行 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 : 无法识别搜索过滤器

我认为第二个代码 sn-p 提取了专有名称并将其提供给过滤器,这就是我在管道中尝试做的事情。

【问题讨论】:

  • 未经测试:Get-ADGroup -LDAPFilter ("..." -f $_) -> Get-ADGroup -LDAPFilter {"..." -f $_}。否则:Get-ADGroup -LDAPFilter ("..." -f $_) -> %{ Get-ADGroup -LDAPFilter ("..." -f $_) }
  • 附录:你还需要Select-Object DistinguishedName -> Select-Object -Expand DistinguishedName,否则你以后必须使用$_.DistinguishedName

标签: powershell active-directory pipeline


【解决方案1】:

您缺少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}

【讨论】:

  • 如何在输出中获取用户名和组名?!我刚刚意识到,如果只列出组而不是关联的用户名,那么使用循环并没有多大用处
  • 查看我的编辑。当然,也可以对输出进行不同的格式化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
相关资源
最近更新 更多