我有一个用逗号分隔的csv文件,如下所示(第一行是标题):
category;email.1;email.2;email.3;email.4;email.5;email.6
category1;sample@gmail.com;;;;;
category2;;;sample2@gmail.com;;;
category3;;sample3@gmail.com;;sample44@hotmail.com;;sample55@gmail.com
以此类推...
现在,我导入它:
$emails = Import-CSV -Encoding Default -Delimiter ";" "c:\temp\myFile.csv"
最后,对于csv中的每一行,我想获取其电子邮件地址与email.1到email.6匹配的AD用户帐户名
因此,我使用foreach循环尝试了此操作,但是我不知道为了获得所需的内容而必须放入其中。
$emails | foreach {
$userAccountName = Get-ADUser -filter {something}
# do some stuff with $userAccountName
}
注意:考虑到将来按类别可以收到6封以上的电子邮件,我希望有一个通用的解决方案。另外请注意,某些电子邮件对于该类别可能为空。
答案 0 :(得分:1)
一旦导入,您就可以枚举与模式匹配的标题
ActionBlock<T>
ATM返回:
$emails = Import-CSV -Encoding Default -Delimiter ";" "c:\temp\myFile.csv"
$EmailHeaders = ($Emails[0].psobject.Properties|Where-Object Name -like 'email.*').Name
嵌套foreach会逐行重复填充的电子邮件。
Get-ADUser已注释掉进行测试
> $EmailHeaders
email.1
email.2
email.3
email.4
email.5
email.6
foreach($Row in $Emails){
foreach($EmailHeader in $EmailHeaders){
if($Email=$Row.$EmailHeader){
[PSCustomObject]@{
Category = $Row.Category
Email_x = $EmailHeader
Email = $Email
SamAccountName= $Null #(Get-ADUser -Filter {EmailAddress -eq "$Email"} -Properties SamAccountName).SamAccountName
}
}
}
}