我有一个简单的4列CSV文件。我试图使用OwnerEmail列和Azure AD(或On-Prem Active Directory)使用PowerShell填充员工ID列。
原始:
员工ID | 部门编号 | OwnerEmail | 成本 | 074674 | test@conso.com | 4353.345 |
---|---|---|---|
456246 | tester@conso.com | 3452.453 |
在网上搜索答案时,首先将任务分解成更小的任务,然后再搜索这些单独的任务。
您已经知道如何向集合中添加新列,所以现在需要:
- 循环遍历集合中的项
- 通过email地址获取AD账号并读取employeeID
- 导出数据到CSV
如果搜索"powershell"再加上这些,你会发现很多答案。
但是我将帮助您完成步骤1和2,它们看起来像这样(用于从本地广告中读取):
$employees = $CSVImport | Select-Object "employeeID",*
foreach ($employee in $employees) {
$user = Get-ADUser -Filter "EmailAddress -eq '$($employee.OwnerEmail)'" -Properties employeeID
$employee.employeeID = $user.employeeID
}
然后您可以使用Export-Csv
将$users
保存回文件。
如果找不到用户帐户,您可能需要一些错误处理。
使用已计算的属性通过再次查询ad来插入值:
$CSVImport |
Select-Object @{
Name = "employeeID"
Expression = {
try
{
(Get-ADUser -Filter "EmailAddress -eq '$($_.OwnerEmail)'" -Properties 'EmployeeID').EmployeeID
}
catch
{
'Not Found'
}
}
}, *
由于AD cmdlet是错误终止默认情况下,我把它放在一个try{} catch{}
语句来处理错误,如果用户没有找到他们的电子邮件。