为每个域创建 CSV

时间:2021-06-22 14:31:10

标签: excel powershell csv

我知道这不是正确的字符串,因为它输出包含标题。我还需要为每个域创建一个 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
}

2 个答案:

答案 0 :(得分:1)

我认为这个问题是由于属性造成的。假设您的 CSV 文件如下所示:

enter image description here

如果是这样,那么当我们从 .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 文件。

enter image description here

答案 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"
相关问题