PowerShell + AD:Return 个来自特定 OU 中任何组的用户,加上计数

PowerShell + AD: Return users from within any groups in a specific OU, plus count

PowerShell "white belt" 在这里,第一次海报。当我在这里的时候,我会尽量不降低这样一个乐于助人的社区的集体智商! :) 我是 运行 安装了 Quest 的 PowerShell 3.0。

我的组织有一个 Active Directory OU,其中有几个安全组,它们都控制 VPN 访问 - 这些是在我们有命名约定之前创建的(呃!)

我不想通过 "get me the members of X and Y and Z" 来依赖名称,而是说 "get me the members of anything in OU XXX"。

理想情况下,我也想在最后进行计数,因为最终这是为了审计 "how many users have VPN access"(尽管我可以将结果输出为 .CSV 或其他如果太复杂的话)

所以我有一些作品可以完成其中的一部分,我只是无法想象如何将它们组合在一起。任何帮助,将不胜感激。这是我的移动部分:

returns 个特定组中的用户:

get-adgroupmember "group_of_coolness" -recursive | Select name

returns 使用 "searchbase":

的用户填充 OU 结果
Get-ADUser -Filter * -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | 
select GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | Out-GridView 

returns 来自几个特定组的结果,但也给出了一个计数(我迄今为止最先进的补丁工作 ^^):

    $GroupMembers=(get-ADGroup -filter {(Name -eq "XXXX") -or (Name -eq "YYYY")} |
     get-adgroupmember -Recursive | select distinguishedname -Unique)

    $Users=foreach ($user in $GroupMembers.distinguishedname) {
    Get-ADUser $user
    }

    $Users | Sort-Object DistinguishedName |
    select name, DistinguishedName

    Write-Host
    Write-Host "Total Users = " $Users.count

如果我可以用“-searchbase "ou=XXX..."

替换 "name -eq XXXX or YYYY" 的话,最后一个代码片段似乎最接近我

你怎么看聪明人 - 我离答案很近了吗?再次感谢您的任何建议,如果我是个笨蛋而忽略了一个已经回答了这个问题的线程,请告诉我(我发现了一些接近的电话,但没有什么是赚钱的)。

我很高兴看到我在这里缺少什么:)

你可以很容易地简化这个:

$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
    | Get-ADGroupMember -Recursive `
    | Select-Object -Unique `
    | Sort-Object DistinguishedName;
$Users | Select-Object Name, DistinguishedName;
Write-Output ("Total Users = {0}" -f $Users.Count);

如果要按组名搜索,可以将第一行更改为 Get-ADGroup -Filter {(Name -eq "Group A") -or (Name -eq "Group B")},就像您使用的那样。

在您的示例中,您没有使用名称和可分辨名称以外的任何内容,因此没有理由再次通过 Get-ADUser 运行 它并像您一样从服务器获取相同的数据.没有理由浪费 DC 的时间。

如果您 需要获取除名称和专有名称之外的其他属性,那么您确实需要这样做。你可以这样做:

$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
    | Get-ADGroupMember -Recursive `
    | Select-Object -Unique `
    | ForEach-Object { Get-ADUser $_ -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname; } `
    | Sort-Object DistinguishedName;

查找特定 OU 中的所有停用用户:

$ExportFile="C:\TempInf\Inaktiv.txt"

Get-ADGroup -Filter{Name -eq "OU Name"}
$OUpath = 'OU=OU Name,OU=OU Parent,DC=WWW,DC=ORGANIZATION,DC=COUNTRY'

$uf = @{Expression={$_.samAccountName};Label="samAccountName";width=30}, `
      @{Expression={$_.GivenName};Label="GivenName";width=50}, `
      @{Expression={$_.whenChanged};Label="whenChanged";width=20}, `
      @{Expression={$_.Description};Label="Description";width=50}, `
      @{Expression={$_.DistinguishedName};Label="DistinguishedName";width=250}

Get-ADUser -Filter {Enabled -eq $false} -SearchBase $OUpath -Properties samAccountName, GivenName, whenChanged, DistinguishedName, Description |
 Format-Table $uf | 
 Out-File -FilePath $ExportFile -Width 400