我正在尝试运行以下脚本以在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}}