Get-ADUser帐户名,其电子邮件地址与csv文件中指示的任何电子邮件匹配

时间:2019-05-17 22:31:32

标签: powershell active-directory

我有一个用逗号分隔的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封以上的电子邮件,我希望有一个通用的解决方案。另外请注意,某些电子邮件对于该类别可能为空。

1 个答案:

答案 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
      }
    }
  }
}