如何在使用 PowerShell 导入电子邮件地址时跳过 csv 中的空单元格



我正在尝试运行以下脚本以在Powershell中导入电子邮件地址:

Import-CSV "C:AliasesTest.csv" | foreach-object {
    Set-Mailbox -Display Name $_.Name -EmailAddresses @{add=$_.Alias1,$_.Alias2,$_Alias3}}

它工作正常,除非 csv 在其中一个别名列下有一个空单元格,此时会产生以下错误:

"The address '' is invalid: "" isn't a valid SMTP address..:

如何构造脚本以在遇到空单元格时忽略它们?

检查每个属性(别名)以查看它是否为空,并且仅将带有值的属性添加到哈希表内的数组中:

Import-CSV "c:AliasesTest.csv" | ForEach-Object {
    #Save the CSV row for use in another loop later
    $CSV = $_
    Set-Mailbox -DisplayName $_.Name -EmailAddresses @{add = ("Alias1","Alias2","Alias3" | ForEach-Object { $Csv.$_ } | Where-Object{$_}) }
}

这种疯狂的作用是,创建一个带有键"add"的新哈希表,该键的值为子表达式。 sub 表达式具有一个属性名称数组,您要检查它是否循环访问,将每个名称转换为该属性的值,然后筛选出空名称。

ForEach-Object之前使用Where-Object过滤器,如下所示:

Import-CSV "C:AliasesTest.csv" | Where-Object {
        $_.Alias1 -and $_.Alias2 -and $_Alias3 
    } | foreach-object { $_ }

如果别名是空字符串,它们将被跳过。您不必对所有这些值都使用 -and,如果只有一个值就可以更改为使用 -or .

过滤别名以删除空别名:

Import-CSV "C:AliasesTest.csv" | foreach-object {
    $aliases = @($_.Alias1,$_.Alias2,$_Alias3) | where-object{$_};
    Set-Mailbox -Display Name $_.Name -EmailAddresses @{add=$aliases}}

最新更新