我使用 powershell 通过调用来执行一些 ADSI/LDAP 查询,DirectoryServices.DirectorySearcher
因为我需要提供一组可供选择的凭据。一旦我执行了一个FindAll()
方法,我就会得到一个DirectoryServices.SearchResultCollection
which implements ICollection
。从那里开始,如果我想将该输出通过管道传输到 ft 或 export-csv,我必须创建一个新的 psobject,将我感兴趣的属性复制到一个新的 PSObject,如下所示:
$dEntry = New-Object DirectoryServices.DirectoryEntry("LDAP://acme.com/cn=sites,cn=configuration,dc=acme,dc=com","user","pass");
$searcher=New-Object DirectoryServices.DirectorySearcher($dEntry);
$searcher.Filter="(objectClass=siteLink)";
$searcher.PropertiesToLoad.Add("siteList");
$searcher.PropertiesToLoad.Add("cost");
$searcher.PropertiesToLoad.Add("replInterval");
$searcher.PropertiesToLoad.Add("cn");
$searcher.FindAll() |%{
$count=$_.Properties.sitelist.Count;
$p=@{"cn"=[string]$_.Properties.cn; "sites"=$count;
"cost"=[string]$_.Properties.cost;
"replInterval"=[string]$_.Properties.replInterval;
};
if ($count>=2) {
$p["mesh"]=$count;
}else{
$p["mesh"]=$count*$count;
}
New-Object psobject -Property $p
}
这看起来很乏味,因为它可能是一项常见的任务,当然,必须有一种更简单的方法来做到这一点。是的,我知道 AD 助手库,但它们对我没有帮助,因为我需要使用备用凭据,而且其中大多数都以这种方式破坏。