1

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

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

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

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

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

4

3 回答 3

1

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

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”具有子表达式的值。子表达式有一个属性名称数组,您要检查它是否迭代,将每个名称转换为该属性的值,然后过滤掉空的。

于 2012-05-12T01:15:40.657 回答
0

过滤别名以取出空的别名:

Import-CSV "C:\AliasesTest.csv" | foreach-object {
    $aliases = @($_.Alias1,$_.Alias2,$_Alias3) | where-object{$_};
    Set-Mailbox -Display Name $_.Name -EmailAddresses @{add=$aliases}}
于 2012-05-12T01:13:49.337 回答
0

在这样之前使用Where-Object过滤器:ForEach-Object

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

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

于 2012-05-11T22:56:07.947 回答