Get-ADUser筛选出特定的OU,自定义列

MNE*_*her 1 csv powershell ou

尝试获取活动用户的审核报告。我们有一个我不想报告的OU。

给我所有活动(启用)的AD帐户。除了特定的OU。

Get-ADUser -Filter{enabled -eq $true} | Select-object Samaccountname,surname,givenname `
        | Export-Csv -NoTypeInformation C:\scripts\ActiveUsers.csv
Run Code Online (Sandbox Code Playgroud)

如何过滤OU=Service Accounts

我还需要在csv输出的A列中有一个自定义列。示例:所有行的A列中的单词“ ACME”。

非常感谢以斯帖

Mat*_*sen 5

过滤父容器

OU是对象DistinguishedName属性的一部分。

用于Where-Object通过删除OU的第一部分DistinguishedName并将其余部分与DistinguishedNameOU的内容进行比较,以过滤出驻留在某个OU中的对象:

$OUDN = "OU=Service Accounts,OU=Accounts,DC=domain,DC=tld"
Get-ADUser -Filter {Enabled -eq $true} | Where-Object { $_.DistinguishedName -notlike "*,$OUDN" }
Run Code Online (Sandbox Code Playgroud)

如果您知道OU名称,但不知道完整名称,则DistinguishedName可以通过将可分辨名称拆分为隔离专区并将第二个名称(直接父容器)与要排除的名称进行比较,从结果中删除OU的直接子对象:

$OUName = "Service Accounts"
Get-ADUser -Filter {Enabled -eq $true} | Where-Object {
    $ObjectCN,$ParentCN,$null = $_.DistinguishedName -split "(?<=[^\\]),"
    $ParentCN -ne "OU=$OUName"
}
Run Code Online (Sandbox Code Playgroud)

或在其祖先路径中排除具有给定OU名称的任何对象:

$OUName = "Service Accounts"
Get-ADUser -Filter {Enabled -eq $true} | Where-Object {
    $ObjectCN,$ParentCNs = $_.DistinguishedName -split "(?<=[^\\]),"
    $ParentCNs -notcontains "OU=$OUName"
}
Run Code Online (Sandbox Code Playgroud)

自定义属性值

Select-Object支持计算的属性。您可以为计算的属性提供一个静态表达式作为选择的第一个属性,如下所示:

Get-ADUser | Select-Object @{Name="MyCustomColumn";Expression={"ACME"}},Name
Run Code Online (Sandbox Code Playgroud)

导出到CSV格式后,上面的示例在col A和B中分别具有colunm标头“ MyCustomColumn”和“ Name”,col A始终保持值“ ACME”,而col B将保留用户的各个名称


MNE*_*her 5

这行得通-感谢帮派。

Get-ADUser -Filter {enabled -eq $true} | ? {$_.DistinguishedName -notlike "*,OU=Service Accounts,*"}
Run Code Online (Sandbox Code Playgroud)

和自定义列:

Select-Object -Property @{n="ColumnA"; e={"ACME"}}
Run Code Online (Sandbox Code Playgroud)