【问题标题】:Export the content from multiple 'Get-ADComputer' commands从多个“Get-ADComputer”命令导出内容
【发布时间】:2019-09-17 14:19:50
【问题描述】:

使用Get-ADComputer 命令,我根据上次设置密码的时间收集每个 OU 的操作系统计数。我面临的问题是将整个内容导出到 CSV 文件中。

当我附加 (Export-Csv -Path 'c:\blah') 时,它只会接受最后一个命令,而将其他命令留在控制台中。

$ou1 = 'OU=Computers,OU=Name1,DC=domain,DC=com'
$ou2 = 'OU=Computers,OU=Name2,DC=domain,DC=com'
$ou3 = 'OU=Computers,OU=name3,DC=domain,DC=com'

$prop = 'OperatingSystem -Like "Windows 10*"'

Get-ADComputer -SearchBase $ou1 -Filter $prop -Property DistinguishedName, OperatingSystem, pwdLastSet |
    Select-Object DistinguishedName, OperatingSystem,
        @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}},
        @{Name="90_Days_Old";Expression={([datetime]::FromFileTime($_.pwdLastSet)).AddDays(90) -le (Get-Date)}}

Get-ADComputer -SearchBase $ou2 -Filter $prop -Property DistinguishedName, OperatingSystem, pwdLastSet |
    Select-Object DistinguishedName, OperatingSystem, 
        @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}},
        @{Name="90_Days_Old";Expression={([datetime]::FromFileTime($_.pwdLastSet)).AddDays(90) -le (Get-Date)}}

Get-ADComputer -SearchBase $ou3 -Filter $prop -Property DistinguishedName, OperatingSystem, pwdLastSet |
    Select-Object DistinguishedName, OperatingSystem, 
        @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}},
        @{Name="90_Days_Old";Expression={([datetime]::FromFileTime($_.pwdLastSet)).AddDays(90) -le (Get-Date)}} 

我的预期结果是将所有三个命令的内容都保存到一个 CSV 文件中。

【问题讨论】:

    标签: powershell csv active-directory


    【解决方案1】:

    你有很多冗余代码。使用循环来避免这种情况。此外,无需将属性 pwdLastSet(包含来自 AD 属性的原始值)转换为 DateTime 值。 Get-ADComputer cmdlet 已经为您完成了这项工作(您想要的属性名称是 PasswordLastSet)。

    $ou   = 'OU=Computers,OU=Name1,DC=domain,DC=com',
            'OU=Computers,OU=Name2,DC=domain,DC=com',
            'OU=Computers,OU=name3,DC=domain,DC=com'
    $prop = 'OperatingSystem -like "Windows 10*"'
    
    $ou | ForEach-Object {
        Get-ADComputer -SearchBase $_ -Filter $prop -Property DistinguishedName, OperatingSystem, PasswordLastSet |
            Select-Object DistinguishedName, OperatingSystem, PasswordLastSet,
                @{Name="90_Days_Old";Expression={$_.PasswordLastSet.AddDays(90) -le (Get-Date)}}
    } | Export-Csv 'C:\path\to\output.csv' -NoType
    

    【讨论】:

      【解决方案2】:

      您可以将所有 OU 放入一个数组中,然后使用 foreach (%) 作为 SearchBase。这也将允许您将结果通过管道 (|) 传输到 csv:

      #OUs
      $OUs = @('OU=Computers,OU=Name1,DC=domain,DC=com','OU=Computers,OU=Name2,DC=domain,DC=com','OU=Computers,OU=name3,DC=domain,DC=com')
      $prop = 'OperatingSystem -like "Windows 10*"'
      #forach -->  | CSV
      $OUs | %{Get-ADComputer -Filter $prop -Properties DistinguishedName, OperatingSystem, pwdLastSet -SearchBase $_ | Select-Object DistinguishedName, OperatingSystem,
              @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}},
              @{Name="90_Days_Old";Expression={([datetime]::FromFileTime($_.pwdLastSet)).AddDays(90) -le (Get-Date)}}} | Export-Csv Test123.csv -NoTypeInformation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        相关资源
        最近更新 更多