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)を使用して、それを .csv に出力して見栄えよくすることができますが、私は同じ方法が repadmin の結果に適用されるとは思わないでください。

私の最終目標は、repadmin から抽出した 3 つまたは多くの属性と共に、コンピューター名を含む CSV を作成することです。

どんな助けでも感謝します、ありがとう。

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 に答える