使用 PowerShell 搜索 ADSI

使用 PowerShell 搜索 ADSI

早上好。几天来,我一直在尝试使用 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

相关内容