我在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
)并将其存储在变量中。
答案 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