我可以单独获取 AD 帐户属性,但不能在 foreach 循环中获取?

问题描述

我正在尝试使用包含电子邮件列表的 CSV 文件,并使用这些电子邮件在 AD 中查找用户,并找到 whenCreated 属性,并将其添加到该 CSV 的列中。

目前,我使用以下行进行查找:


    $created = Get-ADUser -filter "EmailAddress -eq '$email'" -property whenCreated | select -ExpandProperty whenCreated 

理想情况下,这应该实例化一个名为 $created 的变量,然后将创建的日期分配给该变量,无论通过什么电子邮件。这条线单独工作,并与单独的查找一起工作。但是,当我将该行添加到 foreach 循环中时,$created 变量为空。它可以很好地构建新的 CSV,但我要更改的列 (custom) 仍未填充。

Import-Module ActiveDirectory
[array]$CSVfile = Import-CSV "C:\Users\blahblahblah\temp\to_upload.csv" -Header "first_name","last_name","email","group","title","department","phone","address1","address2","city","state","zip","country","custom","manager_name","manager_email","start_date" 
for($i=0; $i -ne $CSVfile.count; $i++) {
    $email = $CSVfile[$i]."email"
    write-host $email
    $created = Get-ADUser -filter "EmailAddress -eq '$email'" -property whenCreated | select -ExpandProperty whenCreated
    Write-Host($CSVfile[$i].Email + "," + $created) -NoNewline
    Write-Host ""
    $CSVfile[$i].custom= $created
}

$CSVfile | Export-CSV "C:\Users\blahblahblah\temp\to_upload_1.csv"

作为它自己的一行,它适用于变量 $email 或其他任何东西,但在 foreach 循环中,$created 变量始终为空。任何其他属性也是如此,例如 SamAccountName、displayname 等。

有什么想法吗?

解决方法

我猜你想要这样的东西:

Import-Module ActiveDirectory

$headers = "first_name","last_name","email","group","title","department","phone","address1","address2","city","state","zip","country","custom","manager_name","manager_email","start_date" 

$CSVfile = Import-CSV -Path "C:\Users\blahblahblah\temp\to_upload.csv" -Header $headers
$newData = foreach ($item in $CSVfile) {
    $item.custom = (Get-ADUser -Filter "EmailAddress -eq '$($item.email)'" -Properties Created -ErrorAction SilentlyContinue).Created
    # output the updated item
    $item
}

$newData | Export-CSV "C:\Users\blahblahblah\temp\to_upload_1.csv" -NoTypeInformation

PowerShell 将 whenCreated 映射到名为 Created 的属性,该属性是转换为本地 DateTime 对象的 whenCreated LDAP 属性