错误处理foreach循环中Get-ADComputer的问题

时间:2015-12-14 15:50:42

标签: powershell active-directory

我遇到了错误处理问题,尝试了很多不同的尝试而没有太多运气。我有一个数据集,我试图将它与AD进行比较。机器可能存在于数据集中,但不存在于AD中。我想在我的结束数组中保留这些信息,但是遇到了终止错误:

  

Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException

$data = Import-Csv -Path .\data.csv
$cdata = @()
foreach ($data in $data) {
    foreach ($addata in (Get-ADComputer -Identity $data.Name -Properties LastLogonDate | Select-Object LastLogonDate)) {
        $combine = @{
            "Name" = $data.Name
            "LastPolicyRequest" = $data.LastPolicyRequest
            "LastLogonDate" =  $addata.LastLogonDate
        }
        $cdata += New-Object psobject -Property $combine
    }
}

1 个答案:

答案 0 :(得分:1)

当您尝试通过不存在的标识获取对象时,

Get-ADComputer(和其他AD cmdlet)会抛出此异常。使用-Filter参数可以避免此问题。另外,请勿对项目使用相同的变量并设置($data in $data)。

$csv = Import-Csv -Path '.\data.csv'
foreach ($data in $csv) {
  $name = $data.Name
  foreach ($addata in (Get-ADComputer -Filter "SamAccountName -eq '$name'" -Properties LastLogonDate | Select-Object LastLogonDate)) {
    ...
  }
}

如果您只想将上次登录日期添加到AD中存在的记录中,您可以执行以下操作:

$cdata = Import-Csv -Path '.\data.csv' |
         Select-Object Name, LastPolicyRequest, @{n='LastLogon';e={
           Get-ADComputer -Filter "SamAccountName -eq '$($_.Name)'" -Properties LastLogonDate |
             Select-Object -Expand LastLogonDate
         }}