我正在创建一个脚本,告诉我创建/修改日期和AD对象的其他信息,以确定大型域中计算机的升级状态。我在Server 2008中以格式良好且易于阅读的方式完成此任务没有任何问题,因为它具有Active Directory模块,但Server 2003不是这种情况。
使用server 2003,我不得不使用不同的脚本方法来收集我想要的信息,但我不确定如何格式化。
这是我目前的剧本:
$filePath = “$ENV:UserProfile\Desktop\output.txt”
## Enter the name of the Domain controller below
$DCName = “Exchange”
$computers = dsquery computer domainroot -name * -limit 0
Foreach ($computer in $computers) {
repadmin /showattr $DCName $computer /atts:"WhenChanged,WhenCreated,OperatingSystem" /long | out-file –append $filepath
}
这是示例输出:
DN: CN=Sample-Object,CN=Computers,DC=Contoso,DC=com
1> whenCreated: 07/04/2011 14:00:02 Pacific Standard Time Pacific Daylight Time
1> whenChanged: 08/09/2012 11:24:22 Pacific Standard Time Pacific Daylight Time
1> operatingSystem: Windows 7 Professional
在服务器2008中,我可以使用字符串格式('“{0}”,“{1}” - 'F $ computer.name,$ computer.whatever) amd输出到.csv使其显示但我不认为相同的方法将适用于repadmin的结果。
我的最终目标只是拥有一个带有计算机名称的CSV,以及我从repadmin中提取的三个或多个属性。
感谢任何帮助,谢谢。
答案 0 :(得分:0)
尝试一下,您可以将其导出为CSV并将其作为对象导回:
$result = dsquery computer domainroot -name * -limit 0 | foreach {
repadmin /showattr $DCName $_ /atts:"WhenChanged,WhenCreated,OperatingSystem" /long
} | Out-String
$result.split([string[]]'DN:',[StringSplitOptions]::RemoveEmptyEntries) | Foreach-Object{
$attr = $_.Split("`r`n",[StringSplitOptions]::RemoveEmptyEntries)
New-Object -TypeName PSObject -Property @{
DN = $attr[0].Trim()
whenCreated = $attr[1].Trim() -replace '^1> whenCreated: '
whenChanged = $attr[2].Trim() -replace '^1> whenChanged: '
operatingSystem = $attr[3].Trim() -replace '^1> operatingSystem: '
}
}