从特定OU导出用户

时间:2017-08-10 13:28:38

标签: powershell active-directory

我正在编写PowerShell脚本以列出我们的活动目录中的所有用户。在我们的主要OU中,我们有子OU,有两件事我正在努力。

首先,我需要从此报告中排除特定的子OU我不知道如何执行此操作。我遇到的第二个问题是我希望将OU包含在报告中,此时我得到的结果如下:

DisplayName   CanonicalName

Kanye West    ad.test/All Users/People that have left/Kanye West

我要排除“ad.test /所有用户”和“/ Kanye west”。所以我想要输出的是SUB OU名称。

这是我到目前为止所写的内容:

Get-ADUser -Filter * -SearchBase "OU=All Users, DC=ad,DC=test" -Properties DisplayName, CanonicalName | select DisplayName, CanonicalName | Export-CSV c:\experiment.csv

2 个答案:

答案 0 :(得分:0)

如果你只需要一个OU的输出,我建议先去那个位置。

Import-Module activedirectory
Set-Location 'AD:\OU=People that have left,OU=All Users,DC=ad,DC=test'
Get-ADUser -Filter * -Properties DisplayName,CanonicalName | Select-Object DisplayName,CanonicalName | Where-Object CanonicalName -ne 'Kanye West' | Export-CSV C:\Experiment.csv

添加:

Import-Module activedirectory
Get-ADUser -Filter 'CanonicalName -ne "Kanye West"' -SearchBase 'OU=People that have left,OU=All Users,DC=ad,DC=test' -Properties DisplayName,CanonicalName |
  Select-Object DisplayName,CanonicalName |
  Export-CSV C:\Experiment.csv

答案 1 :(得分:0)

不确定这是否正是您要查找的内容,但我会获得您想先在数组中搜索的所有OU /容器的列表,然后搜索所有这些对象。

# The OU you want to start searching from
$baseOU = "OU=All Users, DC=ad,DC=test"
# Any OUs that you do not want to be searched
$ouOmits = "All users","Kanye West"
# Get all sub OUs and OU of $baseOU minus any OU that is in the omission list
$ousToSearch = Get-ADOrganizationalUnit -SearchBase $baseOU -Filter *  | 
    Where-Object{$_.name -notin $ouOmits} | 
    Select -Expand DistinguishedName

如果您只有PowerShell 2.0

$ousToSearch = Get-ADOrganizationalUnit -SearchBase $baseOU -Filter *  | 
    Where-Object{$ouOmits -notcontains $_.name} | 
    Select -Expand DistinguishedName

这样就可以获得您要搜索的所有OU。所以现在让我们遍历它们并获得我们真正想要的所有对象。

$ousToSearch | ForEach-Object{
    Get-ADUser -Filter * -SearchBase $_ -SearchScope OneLevel -Properties DisplayName,CanonicalName
}

通常搜索是递归的。为了确保我们的省略按预期工作,我们将搜索范围限制为我们要求的OU。