所以我试图将 AD 中的计算机列表提取到 .csv 文件中。我正在尝试使用 powershell 提取 cn、description、distinguishedName、operatingSystem、whenCreated 和 whenChanged 字段。
我使用的代码是这样的:
# Start of script
Cls
$DomainRootPath='LDAP://DC=<name>,DC=ORG'
$adsearch = New-Object DirectoryServices.DirectorySearcher([adsi]$DomainRootPath)
$adsearch.PageSize = 1000
$adsearch.filter = ("(objectCategory=Computer)")
$adsearch.PropertiesToLoad.AddRange(@("cn"))
$adsearch.PropertiesToLoad.AddRange(@("description"))
$adsearch.PropertiesToLoad.AddRange(@("distinguishedName"))
$adsearch.PropertiesToLoad.AddRange(@("operatingSystem"))
$adsearch.PropertiesToLoad.AddRange(@("whenCreated"))
$adsearch.PropertiesToLoad.AddRange(@("whenChanged"))
$computers = $adsearch.findall()
$computers.Count
$report = @()
foreach ($objResult in $computers)
{
$objItem = $objResult.Properties
$temp = New-Object PSObject
$temp | Add-Member NoteProperty cn $($objitem.cn)
$temp | Add-Member NoteProperty description $($objitem.description)
$temp | Add-Member NoteProperty distinguishedName $($objitem.distinguishedName)
$temp | Add-Member NoteProperty operatingSystem $($objitem.operatingSystem)
$temp | Add-Member NoteProperty whenCreated $($objitem.whenCreated)
$temp | Add-Member NoteProperty whenChanged $($objitem.whenChanged)
$report += $temp
}
$csvfile="AD-All-Computers.csv"
$report | export-csv -notypeinformation $csvfile
"Wrote file for All Computers"
现在,此代码确实创建了具有列名称正确字段的 .csv。然而,它只提取目录中每台计算机的 cn 和描述。填充 .csv 时,所有其他字段均为空白
不确定代码中出了什么问题,因为我没有收到任何错误,非常感谢任何帮助。
顺便说一句,我正在运行 Windows 2008 R2 服务器,并且无法在我的环境中运行 powershell 2.0 cmdlet,因为某些系统阻止我们配置 AD 来执行此操作。
这是一个有趣、奇怪、令人沮丧的问题,但问题是因为当您需要用所有小写字母引用它们时,您在引用属性时使用大写字母(驼峰式)。
即而不是
$objitem.distinguishedName
应该是: $objitem.distinguishedname
因此,用此替换您的 foreach 块,您应该获得所有这些属性:
$report = @()
foreach ($objResult in $computers)
{
$objItem = $objResult.Properties
$temp = New-Object PSObject
$temp | Add-Member NoteProperty cn $($objitem.cn)
$temp | Add-Member NoteProperty description $($objitem.description)
$temp | Add-Member NoteProperty distinguishedName $($objitem.distinguishedname)
$temp | Add-Member NoteProperty operatingSystem $($objitem.operatingsystem)
$temp | Add-Member NoteProperty whenCreated $($objitem.whencreated)
$temp | Add-Member NoteProperty whenChanged $($objitem.whenchanged)
$report += $temp
}
只有一行代码:
Get-ADComputer -Filter * -Properties objectGUID,objectClass,DNSHostName,Enabled,Name,distinguishedName,samAccountName,SID,whenChanged,whenCreated | Select * | Export-CSV computers.txt