Ich erstelle mithilfe von PowerShell einen Bericht über bestimmte Postfachattribute von Exchange Server 2010. Der folgende Code funktionierte von meiner Verwaltungsarbeitsstation aus über eine Remotesitzung einwandfrei.
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value (Get-MailboxStatistics $Mailbox).TotalItemSize
}
Als ich jedoch die.Wert.ToMb()Methode zum Attribut TotalItemSize hinzufügte, schlug das Skript mit dem folgenden Fehler fehl:
$Mailboxes = Get-mailbox -ResultSize Unlimited
foreach ($Mailbox in $Mailboxes)
{
$Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Value ((Get-MailboxStatistics $Mailbox).TotalItemSize.Value.ToMb())
}
Sie können keine Methode für einen Ausdruck mit dem Wert Null aufrufen. In Zeile:6 Zeichen:6 + $Mailbox | Add-Member -MemberType "NoteProperty" -Name "MailboxSizeMB" -Val ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
Argumenttransformation für Parameter „Identity“ kann nicht verarbeitet werden. Der Wert „[Mailbox Name Redacted]“ vom Typ „Deserialized.Microsoft.Exchange.Data.Directory.Management.Mailbox“ kann nicht in den Typ „Microsoft.Exchange.Configuration.Tasks.GeneralMailboxOrMailUserIdParameter“ konvertiert werden. + CategoryInfo: InvalidData: (:) [Get-MailboxStatistics], ParameterBindin...mationException + FullyQualifiedErrorId: ParameterArgumentTransformationError,Get-MailboxStatistics
Und dennoch... der zweite Codeblock (Konvertierung des TotalItemSize-Werts in MB) funktioniert einwandfrei, wenn ich ihn lokal auf dem Exchange-Server ausführe. Kann mir jemand erklären, warum dies nur remote fehlschlägt?
Antwort1
Dies passiert, wenn Ihnen die von Exchange verwendeten .Net-Typen fehlen. PowerShell-Remoting führt eine Serialisierung durch, die dazu führt, dass einige Objekte als „PsObject“ statt als vollständig stark typisierte Objekte enden. Die Lösung besteht darin, die Exchange-Verwaltungskonsole auf Ihrem Clientcomputer zu installieren. Diese enthält die von Ihnen benötigten .Net-Typen.
Antwort2
Versuche dies:
Set-ADServerSettings -ViewEntireForest $true -WarningAction SilentlyContinue
Führen Sie dann den Befehlssatz aus.