Exchange 管理シェルとリモート PowerShell のデータ型の違い

Exchange 管理シェルとリモート PowerShell では、データ型が異なる場合があります。

例えばトランスポート ルールで承認者が設定されている場合は ModerateMessageByUser で確認できます。
Exchange 管理シェルでは、以下の通り System.Array クラスを継承している RecipientIdParameter 型の配列です。

一方、リモート PowerShell では以下の通り ArrayList 型です。

この型の違いが、要素数を取得する際に影響します。
RecipientIdParameter 型の配列では Length プロパティと拡張メソッドの Count の両方を使用して要素数を取得できます。
ArrayList 型では Count プロパティしか利用できません。

さらに厄介なのが、リモート PowerShell の接続元バージョンです。
2.0 であれば問題ありませんが、3.0 以降の場合は要素のプロパティに動的にアクセスして配列を取得することができます。

その結果、リモート PowerShell でも ArrayList 型に対して Length でデータを取得することができます。
これは ModerateMessageByUser のメンバーのデータ型が String であり、String 型は Length プロパティを持つためです。

つまり、PowerShell 3.0 以降から接続したリモート PowerShell で ModerateMessageByUser の Length にアクセスすると、各要素の文字数の配列が返されることになります。
これは要素数ではありません。

スクリプトを作成する際に注意が必要になりますので、しっかりとデータ型を意識した実装が必要になります。