PowerShell を使用して、Exchange Server 2010 の特定のメールボックス属性のレポートを作成しています。次のコードは、リモート セッションを使用して管理ワークステーションから完全に機能しました。
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}
しかし、.Value.ToMb()メソッドを TotalItemSize 属性に適用すると、スクリプトは次のエラーで失敗しました。
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}
null 値の式でメソッドを呼び出すことはできません。行:6 文字:6 + $Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
パラメータ 'Identity' の引数変換を処理できません。「Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox」型の「[Mailbox Name Redacted]」値を「Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter」型に変換できません。+ CategoryInfo: InvalidData: (:) [Get-MailboxStatistics]、ParameterBindin...mationException + FullyQualifiedErrorId: ParameterArgumentTransformationError、Get-MailboxStatistics
それでも、コードの 2 番目のブロック (TotalItemSize 値を MB に変換する) は、Exchange サーバー上でローカルに実行すると完全に機能します。なぜこれがリモートでのみ失敗するのか説明できる人はいますか?
答え1
これは、Exchange が使用する .Net 型が不足している場合に発生します。PowerShell リモート処理は、一部のオブジェクトを完全な強力な型指定のオブジェクトではなく「PsObject」として終了させるシリアル化を実行します。解決策は、クライアント コンピューターに Exchange 管理コンソールをインストールすることです。これにより、必要な .Net 型が含まれます。
答え2
これを試して:
Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue
次にコマンドセットを実行します。