1

次のスクリプトを実行して、PowerShellに電子メールアドレスをインポートしようとしています。

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

csvのエイリアス列の1つの下に空のセルがない限り、正常に機能します。その時点で、次のエラーが生成されます。

"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{$_}) }
}

その狂気は、サブ式の値を持つ「追加」キーを使用して新しいハッシュテーブルを作成することです。サブ式には、繰り返しチェックするプロパティ名の配列があり、各名前をそのプロパティの値に変換してから、空の名前を除外します。

于 2012-05-12T01:15:40.657 に答える
0

次のようにWhere-Objectフィルターを使用します。ForEach-Object

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

エイリアスが空の文字列の場合、それらはスキップされます。-and値を 1 つだけ変更して使用しても問題ない場合は、それらすべてに使用する必要はありません-or

于 2012-05-11T22:56:07.947 に答える
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 に答える