【问题标题】:Formatting the output of repadmin - powershell格式化 repadmin 的输出 - powershell
【发布时间】:2012-09-06 19:24:31
【问题描述】:

我正在创建一个脚本,告诉我 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) 并输出它到 .csv 以使其易于展示,但我认为相同的方法不适用于 repadmin 的结果。

我的最终目标是简单地拥有一个带有计算机名称的 CSV,以及我从 repadmin 中提取的三个或多个属性。

感谢您的帮助。

【问题讨论】:

    标签: powershell formatting windows-server-2003 dsquery


    【解决方案1】:

    试一试,您可以将其导出为 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: '
        }
    
    }
    

    【讨论】:

    • 效果很好,谢谢!我有一些后续问题,你会很友善的。有什么方法可以按OU过滤吗? dsquery / repadmin 似乎没有这种能力,但我尝试在第一行末尾使用 where-object 语句。 $result = dsquery computer domainroot -name * -limit 0 | foreach { repadmin /showattr $DCName $_ /atts:"WhenChanged,WhenCreated,OperatingSystem" /long } | Where-Object {$_ -notlike "*OU=Disabled Computers*"} 但是,这似乎只是删除了第一行,留下了该对象的 repadmin 查询的其余部分。
    • 在第一次拆分后添加 where 子句。将第 5 行替换为: $result.Split([string[]]'DN:',[StringSplitOptions]::RemoveEmptyEntries) | Where-Object {$_ -notlike 'OU=Disabled Computers'} | Foreach-对象 {...
    猜你喜欢
    • 2022-07-20
    • 2011-05-30
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多