powershell - Get-ADUser 帐户名称,其电子邮件地址与 csv 文件中指示的任何电子邮件匹配
问题描述
我有一个逗号分隔的 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 封。还要考虑到该类别的某些电子邮件可能为空。
解决方案
导入后,您可以枚举与模式匹配的标头
$emails = Import-CSV -Encoding Default -Delimiter ";" "c:\temp\myFile.csv"
$EmailHeaders = ($Emails[0].psobject.Properties|Where-Object Name -like 'email.*').Name
自动取款机返回:
> $EmailHeaders
email.1
email.2
email.3
email.4
email.5
email.6
嵌套 foreachs 以迭代每行填充的电子邮件。
Get-ADUser 注释掉以进行测试
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
}
}
}
}
Category Email_x Email SamAccountName
-------- ------- ----- --------------
category1 email.1 sample@gmail.com
category2 email.3 sample2@gmail.com
category3 email.2 sample3@gmail.com
category3 email.4 sample44@hotmail.com
category3 email.6 sample55@gmail.com
推荐阅读
- html-framework-7 - 页面无法访问设置上下文
- c# - 我可以在实体框架分页语法中使用 join 吗?
- php - 为什么我没有收到来自我的 PHP 页面的任何响应并且没有其他错误?
- odoo - 如何将 Avaya CTI 与 Odoo 集成
- spring-boot - 如何在 OAuth2 的 cookie 中存储访问令牌?
- c - 在编译时避免变长堆栈数组
- uml - 在 UML 中,组合是否意味着关联类?
- bash - 使用 sed 命令时未知命令 '<'
- vb.net - 使用 process.start 在 vb.net 中调用 .exe 未显示 Windows 通知
- extjs - 无法在 ext js 6.7 中创建控制器的对象