0

我正在创建一个脚本,告诉我 AD 对象的创建/修改日期和其他信息,以确定大型域中机器的升级状态。我在 Server 2008 中以格式良好且易于阅读的方式完成此操作没有问题,因为它具有 Active Directory 模块,但在 Server 2003 中并非如此。

对于服务器 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 中提取的三个或多个属性。

任何帮助表示赞赏,谢谢。

4

1 回答 1

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: '
    }

}
于 2012-09-06T19:47:40.960 回答