Powershell verschluckt Felder in mehrwertigen Attributen 18. Oktober 2012

Gerade wenn man mit der Powershell den Exchange Server oder auch das Active Directory bearbeitet, kommt man sehr schnell mit Attributen in Berührung, die mehrwertig sind. Leider hat die Powershell hier die dumme Angewohnheit ab einer bestimmten Anzahl von Werten im Attribut die Ausgabe mit drei Punkten “…” abzuschneiden. Gerade wenn man interaktiv mit der Shell arbeitet und nach bestimmten Informationen sucht, können einem dort wichtige Sachen einfach durch die Lappen gehen, weil man Sie nicht sieht und die drei Punkte ignoriert werden. Ich demonstriere das einfach an einem einfachen Beispiel. Wenn man bei einem Benutzerkonto die E-Mail Adressen prüfen möchte, dann kann man sich in der Exchange Managementshell einfach die Eigenschaften des Postfachs ansehen. Dort sieht man in der Objekteigenschaft “Emailaddresses” alle Adressen, die für dieses Postfach konfiguriert sind.

get-mailbox in Exchange Management Shell

Hinter der Objekteigenschaft “Emailaddresses” verbirgt sich eigentlich das Active Directory Attribut “proxyAddresses”. Wenn man sich über das  Active Directory cmdlet “get-aduser” die Adressen ansehen möchte, dann muss das Attribut “proxyaddresses” als gewünschte Eigenschaft mit angegeben werden.

get-aduser administrator -properties proxyaddresses

Wie man sieht, wird die fünfte E-Mail Adresse nicht mehr von der Powershell angezeigt. Was die Exchange Management Shell also korrekt anzeigt, wird in der normalen Powershell einfach abgeschnitten.

Verantwortlich für dieses Verhalten ist die Variable $FormatEnumerationLimit. Der Wert dieser Variable gibt an, wie viele Elemente eines mehrwertigen Attributs von der Powershell expandiert bzw. angezeigt werden. Wenn man sich den Wert dieser Variable in der Exchange Management Shell ansieht, dann steht er auf 16 (Exchange 2010) und in der normalen Powershell auf 4. Sollen mehr Werte des Attributs angezeigt werden, dann kann man dieser Variablen einfach einen neuen Wert zuweisen. Soll das dauerhaft geschehen, dann lässt sich die Zuweisung auch über die Profildatei realisieren. Bei Exchange Server könnte man auch das Powershellskript “$env:programfiles\microsoft\exchange server\v14\bin\remoteexchange.ps1″ editieren, in der im Standard die Variable auf 16 hochgesetzt wird. Allerdings könnte es passieren, das ein Exchange Service Pack oder Rollup diese Änderung wieder überschreibt. Deshalb ist es wesentlich eleganter, diese Änderung in die Profildatei des jeweiligen Benutzers oder aber auch in die Profildatei der Powershell aufzunehmen.

remoteexchange.ps1

Wenn man die Powershell dazu zwingen möchte, alle Werte in der Ausgabe aufzulisten, dann setzt man die Variable $FormatEnumterationLimit einfach auf den Wert “-1″.

$FormatEnumerationLimit = -1

One Comments
Peter Kriegel Oktober 20th, 2012

Hallo Frank!

Danke für den guten Artikel!

Peter
http://www.admin-source.de

Leave a Reply

*