早上好。几天来,我一直在尝试使用 PS 来整理一些简单的东西(应该很简单),但我还没有弄清楚。我正在尝试使用 PS 从 ADSI 搜索和检索信息。当我在 PS 控制台中使用以下命令时:
Get-ADObject "CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com" -Properties *
它返回已分配值的对象属性(这是正确的),因此可以正常工作。但是,我需要的是 AD 对象的子项,因此我尝试添加搜索范围:
Get-ADObject "CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com" -SearchScope OneLevel -Properties *
我收到一条错误消息报告:
A positional parameter cannot be found that accepts argument "CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com"
因此,我尝试了一种不同的方法:
[string]$strCrLf = "`r`n"
[string]$strDoubleQuote = '"'
$ChildObjects = @()
$ParentObject = ([ADSI]"LDAP://CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com")
ForEach ($Child in $ParentObject.psBase.Children)
{
$ChildObjects += @("([ADSI]" + $strDoubleQuote + $Child.Path + $strDoubleQuote + ").distinguishedName" + $strCrLf)
}
$ChildObjects | ForEach-Object {
Invoke-Expression $_
}
以上确实返回专有名称但我如何检索孩子的其他属性,例如显示名称,姓名和创建时间。如果我能得到它,那么我就可以将其全部放入可以导出到 CSV 文件或其他文件的数组中。我是否需要使用类似 LDAP 的东西?
答案1
您在第一个循环中进行的格式化实际上没有必要。尝试使用以下内容:
$ChildItems = ([ADSI]"LDAP://CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=com")
$ChildItems.psbase.Children | Format-Table Name, DisplayName, whenCreated | Out-File C:\test.csv