Skip to the main content.

ScriptRunner Blog

Das Verborgene sichtbar machen – Bringen Sie Licht ins Dunkel

Inhaltsverzeichnis

 

 

Post Featured Image

In diesem Artikel werden wir das Verborgene, das nicht so Offensichtliche in PowerShell erkunden – die Informationen, die auf den ersten Blick unsichtbar sind und zusätzliche Schritte erfordern, um sie aufzudecken. Wussten Sie zum Beispiel, dass selbst bei der Verwendung von Format List nicht alle Details angezeigt werden?

In Microsoft 365 gibt es beispielsweise Cmdlets, die versteckte Objekteigenschaften haben. Bei einigen Cmdlets müssen Sie erst die richtige Einstellung finden, damit zusätzliche Details in der Ausgabe offenbart werden. Im Text werden diese Einstellungen behandelt und Tipps gegeben, wie Sie herausfinden können, welche Details Ihnen fehlen, damit Sie das Beste aus PowerShell herausholen können.

 

Spezielle Einstellungen 

Wir wollen im Folgenden -Status und -IncludeReport behandeln. Dadurch können bei bestimmten Befehlen mehr Details preisgeben werden, diese Einstellungen sind bei einigen Cmdlets verfügbar, um zusätzliche Informationen abzurufen. Um die Leistung der Cmdlets zu erhöhen, werden einige Werte ausgeblendet, u.a. da die angezeigten Informationen nicht von jedem Skript benötigt werden. Hier sind einige Beispiele:

-Status

Wenn -Status zusammen mit dem Cmdlet "Get-MailboxDatabase" verwendet wird, werden Informationen über die Postfachdatenbanken auf dem Server oder den Servern angezeigt, auf denen Exchange Server 2019 ausgeführt wird. Der obige Befehl erzeugt eine nützliche Tabelle wie diese:

01_Get-MailboxDatabase

Wenn wir denselben Befehl mit Format-List wie folgt ausführen: ...

Get-MailboxDatabase | Fl

…stellen wir fest, dass einige Werte nicht ausgefüllt sind. Dies könnte bedeuten, dass wirklich nichts gespeichert ist und die Eigenschaft daher wirklich leer ist. Das ist jedoch bei einigen dieser Eigenschaften nicht der Fall. Bei einer Postfachdatenbank betrifft es das Feld 'Mounted':

02_Get-MailboxDatabase Fl

Beachten Sie, dass dieses Feld leer ist. Warum sollte dieses Feld leer sein, obwohl es doch ein wichtiger Wert zu sein scheint. An dieser Stelle kommt die Einstellung '-Status' ins Spiel:

Get-MailboxDatabase -Status

Jetzt wissen wir, ob die Datenbank gemountet ist oder nicht:

03_Get-MailboxDatabase Status

Nun gibt es einige PowerShell-Cmdlets, bei denen -Status tatsächlich nach dem Status eines Objekts sucht, während die Einstellung mehr Informationen über etwas in Exchange preisgibt. Ein weiteres Beispiel ist:

Get-ExchangeServer | fl

Ohne -Status erscheinen viele Eigenschaften leer, nicht ausgefüllt:


ErrorReportingEnabled
CurrentDomainControllers
CurrentGlobalCatalogs
CurrentConfigDomainController

Ohne -Status

04_no-Status

Mit -Status

05_with-Status

Wir sehen nach, welche der Befehle eine Option für -Status haben, und stellen fest, dass es eine ganze Reihe davon gibt. Wenn wir die einzelnen Cmdlets untersuchen, indem wir einfach den Namen des Cmdlets gefolgt vom Parameter -Status eingeben, können wir sehen, welche Cmdlets -Status verwenden, um weitere Informationen anzuzeigen, und welche Cmdlets die Einstellung zum Filtern von Ergebnissen/Ausgaben verwenden.

Die Einstellung ‘-Status’ zum Filtern verwenden 

Get-MailboxRestoreRequest -Status

06_-Status error message

Beachten Sie die rote Fehlermeldung. Dies bedeutet, dass nach dem Parameter -Status ein Wort oder 'Argument' fehlt. Die gleichen Ergebnisse sind für diese Cmdlets zu sehen:


Get-MessageTrackingReport -Status
Get-MigrationBatch -Status
Get-MigrationUser -Status
Get-PublicFolderMailboxMigrationRequest -Status
Get-PublicFolderMigrationRequest -Status
Get-PublicFolderMoveRequest -Status
New-UMAutoAttendant
New-UMIPGateway
Set-UMIPGateway
Set-UMService

 

-IncludeReport

Die Option -IncludeReport kann als Einstellung für ausführlichere Information bestimmter PowerShell-Cmdlets betrachtet werden. Die Cmdlets, die am häufigsten mit -IncludeReport verwendet werden, sind Befehle für Umzugsanforderungen, da sie sich auf von Exchange generierte Migrationsberichte beziehen. Beispiele hierfür sind Get-MigrationBatch, Get-MoveRequestStatistics und Get-PublicFolderMigrationRequestStatistics.

Um zu sehen, was die Einstellung -IncludeReport bringt, ist Get-MigrationBatch ein gutes Beispiel. Stellen Sie sicher, dass Sie die Option Format-List verwenden, um den vollen Umfang des Befehls bereitzustellen. Ohne die Option -IncludeReport wäre die resultierende Ausgabe der Basissatz an Informationen über die Migration, der von Get-MigrationBatch gemeldet wird. In der Tat ist festzustellen, dass einige Werte leer sind, siehe dieses Beispiel:

07_Get-MigrationBatch Fl Report empty

Beachten Sie, dass zwei Felder, ein Feld namens 'Report' und ein weiteres namens 'Reports', beide leer sind. Wenn wir diesen Einzeiler ausführen:

Get-MigrationBatch -IncludeReport | Fl Report*

...werden die Felder 'Report/Reports' aufgefüllt und enthalten Informationen wie diese:

08_Get-MigrationBatch -IncludeReport

Während diese Informationen für Migrationen gut sind, können wir noch mehr Informationen aufdecken, wenn wir diese Einstellung auf das Cmdlet Get-MoveRequestStatistics anwenden:

Get-MoveRequestStatistics -IncludeReport | Fl Report*

09_Get-MigrationBatch -Get-MoveRequestStatistics

Wie Sie sehen, ist die Option -IncludeReport für dieses Cmdlet wie eine ausführliche Beschreibung für Postfachumzugsanforderungen (Mailbox Move Requests).

 

FL *

Microsoft hat kürzlich eine neue Funktion zum Schutz vor Reply-All-Storms in Exchange Online hinzugefügt, die ein Segen für Unternehmen ist, die Probleme mit ReplyAlls hatten, die zu Hunderten oder Tausenden von E-Mails führten, die alle Arten von Problemen verursachten. In Exchange Online ist dies eine globale Funktion, die mit Get-TransportConfig sichtbar sein sollte. Die Einstellungen sind jedoch nicht wirklich sichtbar, wenn wir das Cmdlet wie folgt ausführen:


Get-TransportConfig
Get-TransportConfig | Ft
Get-TransportConfig | Fl

Warum ist das so? Ich glaube, dies ist eine von mehreren versteckten Eigenschaften für Exchange Online. Wie können wir die Eigenschaften des Reply-All-Storm-Schutzes aufdecken? Nun, es gibt zwei Möglichkeiten, dies anzuzeigen:


Get-TransportConfig | Fl *

Und


Get-TransportConfig | Fl Reply*

10_Get-TransportConfig

Die Verwendung von 'Fl *' hätte ich jetzt nicht erwartet. Als PowerShell-Benutzer seit 2007 hat die Verwendung von 'Fl' meiner Erfahrung nach normalerweise alle Eigenschaften eines Objekts mit PowerShell offengelegt. Das Hinzufügen des Sternchens mit dem 'Fl' ist jedoch etwas Neues ... Tatsächlich werden durch die Verwendung von 'Fl *' in diesem Cmdlet 28 zusätzliche Eigenschaften der Transportkonfiguration von Exchange Online angezeigt:


AgentGeneratedMessageLoopDetectionInSmtpEnabled
AgentGeneratedMessageLoopDetectionInSubmissionEnabled
AllowLegacyTLSClients
AttributionRejectBeforeMServRequest
AttributionRejectConsumerMessages
ConvertReportToMessage
CurrentTransportSystemState
DiagnosticsAggregationServicePort
JournalReportDLMemberSubstitutionEnabled
MaxAllowedAgentGeneratedMessageDepth
MaxAllowedAgentGeneratedMessageDepthPerAgent
OrganizationFederatedMailbox
OtherWellKnownObjects
PreserveReportBodypart
QueueDiagnosticsAggregationInterval
ReplyAllStormBlockDurationHours
ReplyAllStormDetectionMinimumRecipients
ReplyAllStormDetectionMinimumReplies
ReplyAllStormProtectionEnabled
TransportRuleAttachmentTextScanLimit
TransportRuleCollectionAddedRecipientsLimit
TransportRuleCollectionRegexCharsLimit
TransportRuleConfig
TransportRuleLimit
TransportRuleMinProductVersion
TransportRuleRegexValidationTimeout
TransportRuleSizeLimit
TransportSystemState

Das letzte Beispiel sind DLP Sensitive Information Types, die im Security and Compliance Center PowerShell-Modul vorhanden sind. Wenn wir einen bestimmten Typ in PowerShell auflisten, indem wir '| Fl' verwenden, erhalten wir diese Ergebnisse:

11_Fl results

Wir erhalten zwar einige Details, aber es fehlen noch einige, die wünschenswert wären.
Wie wäre es, wenn wir den '| Fl *'-Trick noch einmal mit dem Sternchen ausprobieren?

12_Fl results with asterisk

Wenn der 'Fl *' mit Get-DLPSensitiveInformationType verwendet wird, werden weitere Eigenschaften des sensiblen Informationstyps angezeigt: RecommendedConfidenceLevel, HighConfidenceLevelEntityDetails, MediumConfidenceLevelEntityDetails, LowConfidenceLevelEntityDetails, PrimitiveElementDetails, Classifier, Fingerprints und mehr.

 

Exchange Online V2

Die neuen Cmdlets für Exchange Online V2 (EXO V2) sind zwar anders aufgebaut, bestehen aber immer noch aus versteckten Werten und verbergen absichtlich Informationen, um schnellere Ergebnisse für einen Exchange Online-Administrator zu erzielen. Wie wird dies erreicht? Durch Einschränkung der Eigenschaften, die über eine ausgewählte Anzahl häufig verwendeter Cmdlets zurückgegeben werden.

Reduzieren von Daten 

Um diese Leistung zu erzielen, musste Microsoft die zurückgegebenen Daten reduzieren (siehe Microsoft-Dokumentation). Die zurückgegebenen Daten können sehr stark reduziert werden, und zwar so stark, dass die Reduktion über das Ziel hinausschießt. Zwei verschiedene Einstellungen helfen bei dieser Reduzierung, nämlich Eigenschaften und Sets von Eigenschaften (Property Sets). Mit diesen beiden Methoden lässt sich bestimmen, wie viele Daten bei der Ausführung eines dieser neuen Cmdlets abgerufen werden. Wenn wir sie kennen, wissen wir, wie wir sie richtig und effizient einsetzen können. Schauen wir uns diese Elemente an.

Sets von Eigenschaften (Property Sets)

Ein Set von Eigenschaften ist eine vordefinierte Gruppe von Objekteigenschaften, die Microsoft als logische Gruppierung konzipiert hat. Diese Sets zeigen Eigenschaften an, die dann von den neuen EXO V2-Cmdlets aufgedeckt werden können. Wir können nicht einfach alle Eigenschaften eines Objekts auflisten und sie bei der Ausgabe filtern. Wir müssen entscheiden, was wir wollen, und die uns zur Verfügung stehenden Property Sets auswählen. Nehmen wir das Beispiel von Get-Mailbox:

Szenario - Überprüfung der Quoten für alle Ressourcenpostfächer und Auflistung grundlegender Informationen über das Postfach selbst.

 

Alte Methode

Get-Mailbox | Where {$_.IsResource -eq 'True'} | Ft Name, Alias, PrimarySMTPAddress, *quota

 

Neue EXO V2 Methode

Mit den neuen Cmdlets müssen wir uns auf Property Sets wie dieses verlassen:

Get-EXOMailbox -PropertySets Minimum, Resource, Quota | Where {$_.IsResource -eq 'True'} | ft

Wenn wir den PropertySets-Parameter nicht hinzufügen würden, würde das Cmdlet nur eine leere Ergebnismenge zurückgeben, da keine Eigenschaften für die Objekte zurückgegeben würden, die PowerShell filtern, geschweige denn auf dem Bildschirm anzeigen könnte. Jetzt müssen die Ergebnisse eines Cmdlets mit dem PropertySets-Parameter nicht mehr gefiltert werden, sondern PowerShell gibt einfach alle Werte für ein Property Set zurück. Wenn wir z. B. das Property Set 'Quota' auswählen, die Ergebnisse aber nicht filtern, würden wir alle diese Eigenschaften für jedes Objekt erhalten:

 

Eigenschaften (Properties) 


ArchiveQuota
ArchiveWarningQuota
CalendarLoggingQuota
xternalDirectoryObjectId
IssueWarningQuota
ProhibitSendQuota
ProhibitSendReceiveQuota
RecoverableItemsQuota
RecoverableItemsWarningQuota
RulesQuota
DatabaseQuotaDefaults

Es gibt eine gemeinsame Eigenschaft in allen Property Sets und das ist ExternalDirectoryObjectId. Laut MSDN gibt dieses Attribut den eindeutigen Bezeichner für Benutzer und Gruppen an und wird ausgefüllt, wenn die entsprechenden Windows Server-Versionen von Active Directory mit Azure Active Directory verbunden sind (Zitat: "This attribute specifies the unique identifier for users and groups and is populated when applicable Windows Server releases of Active Directory are federated with Azure Active Directory.").

Eigenschaften sind die einzelnen Werte, aus denen die verschiedenen Sets an Eigenschaften für die neuen Cmdlets bestehen. Mithilfe von Eigenschaften können wir einzelne Werte für ein Objekt aufdecken, anstatt uns auf ein vollständiges Set von Eigenschaften zu verlassen. Dies ermöglicht zwar einen gezielten Wertabruf, kann aber je nach Anzahl der benötigten Eigenschaften schnell ausufern. Wenn wir uns beispielsweise darauf verlassen, dass wir unsere Eigenschaften für das obige Cmdlet Get-Mailbox auswählen, sieht es in etwa so aus:


Get-EXOMailbox -properties Name,Alias,PrimarySMTPAddress, IsResource, IssueWarningQuota, ProhibitSendQuota,ProhibitSendReceiveQuota | Where {$_.IsResource -eq 'True'} | ft

Dies führt zwar zu denselben Ergebnissen, ist aber bereits recht unhandlich. Daher kann die Wahl zwischen den beiden Optionen (Eigenschaften oder Sets von Eigenschaften) für Ihre Skripte von Bedeutung sein. Ich empfehle Ihnen, den Quelltext der obigen Liste zu lesen und sich mit allen Eigenschaften und Eigenschaftsgruppen vertraut zu machen.

 

Fazit

Versteckte Informationen, wie sie in diesen Beispielen gezeigt werden, können für die Arbeit mit PowerShell entscheidend sein. Bei den meisten Beispielen ist es sinnvoll, dass diese Elemente bei den meisten anfänglichen Abfragen mit PowerShell ausgeblendet werden. Wenn wir jedoch erwarten, dass von Anfang an mehr offengelegt wird, kann sich dieses Verbergen als frustrierender erweisen als erwartet. Eine Technik, die verwendet werden kann, wenn leere Eigenschaften gefunden werden, besteht darin, zu prüfen, ob es zusätzliche Parameter gibt (z. B. -Status oder -Includereport) oder FL* zu verwenden. Ein Blick in die Hilfe eines Cmdlets oder das Aufdecken aller Eigenschaften für das Cmdlet kann zum Auffinden weiterer Beispiele für versteckte Daten führen. Wenn die von Ihnen gesuchten Informationen also nicht angezeigt werden, graben Sie ein wenig tiefer und Sie werden sie vielleicht trotzdem finden.

 

 


 

Weiterführende Links

 

Zusammenhängende Posts

2 min read

VMUG Webcast: VMware Management meistern mit PowerCLI

5 min read

PowerShell mit Get-Help meistern

Über den Autor: