如何修剪AD搜索的结果?

时间:2015-09-07 08:05:44

标签: powershell active-directory

我在AD中使用以下代码进行搜索:

Clear-Host
$Dept=Read-Host "Enter the desired department"
$strFilter = "(&(objectCategory=User)(Department=*$Dept*))"

$objDomain = New-Object System.DirectoryServices.DirectoryEntry

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"
$colResults = $objSearcher.FindAll() | Export-Csv H:\TEST\EXPORTtestNEW2222.csv

结果采用以下格式:

#TYPE System.DirectoryServices.SearchResult 
Path    Properties
LDAP://CN=BECALI Gigi (SALES),OU=Users_NOAP,OU=SALES,OU=DGs,DC=net2,DC=cec,DC=fr,DC=int System.DirectoryServices.ResultPropertyCollection
LDAP://CN=BRANESCU Mimi(SALES),OU=Users_NOAP,OU=SALES,OU=DGs,DC=net2,DC=cec,DC=eu,DC=int    System.DirectoryServices.ResultPropertyCollection
LDAP://CN=BAU Cucu (SALES),OU=A2-testusersettings,OU=Users_NOAP,OU=SALES,OU=DGs,DC=net2,DC=cec,DC=eu,DC=int System.DirectoryServices.ResultPropertyCollection

我需要用“LDAP://”和“属性”部分完全“删除”该部分(我根本不需要System.DirectoryServices.ResultPropertyCollection)并将其存储在变量中。

2 个答案:

答案 0 :(得分:0)

而不是:

$objSearcher.FindAll() | export-csv H:\TEST\EXPORTtestNEW2222.csv

您可以使用Select-Object cmdlet精确选择和操作所需的属性:

$objSearcher.FindAll() | Select-Object @{Name="Path";Expression = {$_.Path.Substring(7)}} |Export-Csv H:\TEST\EXPORTtestNEW2222.csv

在这里,我们创建了一个名为Path的新属性,其值取现有的Path属性,但使用Substring()删除了前7个字符

答案 1 :(得分:0)

您可以展开Path属性并从值中删除LDAP://前缀。另外,如果您希望将结果导出到变量中,请不要将结果导出到文件中。

$colResults = $objSearcher.FindAll() | Select-Object -Expand Path |
              ForEach-Object { $_ -replace '^LDAP://' }

但是,更简单的方法是使用ActiveDirectory模块中的Get-ADUser cmdlet:

Import-Module ActiveDirectory

$Dept = Read-Host "Enter the desired department"
$strFilter = "(&(objectCategory=User)(Department=*$Dept*))"

$colResults = Get-ADUser -LDAPFilter $strFilter |
              Select-Object -Expand DistinguishedName