我遇到了错误处理问题,尝试了很多不同的尝试而没有太多运气。我有一个数据集,我试图将它与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
}
}
答案 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
}}