0

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

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

我不希望通过“让我获得 X、Y 和 Z 的成员”来依赖名称,而是说“让我获得 OU XXX 中任何事物的成员”。

理想情况下,我也想在最后进行计数,因为最终这是为了审核“有多少用户拥有 VPN 访问权限”(尽管如果这太复杂的话,我可以将结果输出为 .CSV 或其他内容)

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

返回一个特定组中的用户:

get-adgroupmember "group_of_coolness" -recursive | Select name

使用“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 

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

    $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”

你怎么看聪明人——我离答案很近吗?再次感谢您的任何建议,并让我知道我是否是个傻瓜并忽略了一个已经回答的线程(我发现了一些密切的电话,但没有什么很划算的)。

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

4

2 回答 2

1

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

$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")}您之前使用的名称。

在您的示例中,您没有使用除 Name 和 Distinguished name 之外的任何其他名称,因此没有理由再次通过 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;
于 2015-05-19T18:32:30.457 回答
1

查找特定 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
于 2021-04-15T19:26:29.897 回答