我知道这不是正确的字符串,因为它输出包含标题。我还需要为每个域创建一个 CSV。
我有一个 CSV 格式的电子邮件列表
Emails
-----
John@abc.com
Stacy@abc.com
Bob@xyz.com
我有另一个 CSV 域列表
Domains
-----
abc.com
xyz.com
我想为每个域创建新的 CSV 文件。例如 abc.csv
Emails
-----
John@abc.com
Stacy@abc.com
而 xyz.csv 是
Emails
-----
Bob@xyz.com
这是我迄今为止尝试过的:
$emails = Import-Csv emails.csv
$domains = Import-Csv domains.csv
Foreach ($i in $domains) {
$emails | Where-Object Email -like *$i | Export-Csv "test.csv" -NoTypeInformation
}
答案 0 :(得分:1)
我认为这个问题是由于属性造成的。假设您的 CSV 文件如下所示:
如果是这样,那么当我们从 .csv 读取时,我们将获得一组具有 emails
属性和 domains
属性的项目。
这意味着我们需要像这样修改你的循环以遍历它们:
#added `.Domains` here
Foreach ($i in $domains.Domains) {
$FileName = "UsersOf$($i)Domain.csv"
$emails | Where-Object Emails -like "*$i" | `
Export-Csv $fileName -NoTypeInformation
}
通过这个小小的改变(你是如此接近!)它现在创建了预期的 CSV 文件。
答案 1 :(得分:0)
我认为您根本不需要 Domains
csv 文件。只需解析电子邮件地址中的域名即可:
Import-Csv -Path 'D:\Test\emails.csv' |
Group-Object {($_.Emails -split '@')[-1]} |
ForEach-Object {
$_.Group | Export-Csv -Path ('D:\Test\{0}.csv' -f ($_.Name -split '\.')[0]) -NoTypeInformation
}
结果是两个文件:
abc.csv
"Emails"
"John@abc.com"
"Stacy@abc.com"
xyz.csv
"Emails"
"Bob@xyz.com"