3

试图获得活跃用户的审计报告。我们有一个我不想报告的 OU。

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

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

我怎样才能过滤掉OU=Service Accounts

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

非常感谢以斯帖

4

2 回答 2

11

过滤父容器

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

用于通过删除 的第一部分并将其余部分与OU 的比较Where-Object来过滤驻留在某个 OU 内的对象:DistinguishedNameDistinguishedName

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

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

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

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

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

自定义属性值

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

Get-ADUser | Select-Object @{Name="MyCustomColumn";Expression={"ACME"}},Name

导出到 CSV,上面的示例将分别在 col A 和 B 中具有列标题“MyCustomColumn”和“Name”,col A 始终保存值“ACME”,而 col B 将保存用户的各个名称

于 2015-08-03T16:35:45.920 回答
6

这行得通-谢谢帮派。

Get-ADUser -Filter {enabled -eq $true} | ? {$_.DistinguishedName -notlike "*,OU=Service Accounts,*"}

和自定义列:

Select-Object -Property @{n="ColumnA"; e={"ACME"}}
于 2015-08-04T19:44:05.157 回答