none
Deserialized Objekte sortieren RRS feed

  • Frage

  • Guten Morgen Forum,

    ich würde gerne von einer importierten Remote-Session aus die 20 grössten Postfächer auf dem Exchange-Server abrufen.
    Dazu nutze ich folgenden Befehl:

    get-mailbox|Get-MailboxStatistics`
    |Select-object DisplayName,ItemCount,StorageLimitStatus,TotalItemSize`
    |Sort-Object TotalItemsize -Descending`
    |Select-Object -First 20

    Das funktioniert leider nicht, da die zurückgegebenen Objekte ja "Deserialized" sind
    und somit die Sortierung von "Sort-Object" Unfug ergibt.

    Selbstverständlich kann ich mich via RDP auf dem Exchange einloggen und den Befehl 
    auf der Powershell dort ausführen, aber das ist ja konträr zu der eigentlichen
    PsRemote-Idee.

    Freilich könnte man an dem String, den TotalItemSize zurückliefert, solange "rumbasteln"
    bis ein Wert dabei herauskommt, der sich sortieren lässt, aber da muss es doch noch eine
    elegantere Lösung geben...

    Hätte da jemand einen Ansatz für mich?

    Vielen Dank.

    Thomas


    • Bearbeitet Thomas_Fey Mittwoch, 13. November 2013 10:23 Fipptehler
    Mittwoch, 13. November 2013 10:03

Antworten

Alle Antworten

  • Ich habe 0 Ahnung von Exchange! Aber ich kann die Internet Suchmaschinen bedienen  ;-)

    So müsste es gehen wenn man aus dem TotalItemSize Objekt den Value heraus holt und ihn in MB umrechnen lässt :

    Get-Mailbox | Get-MailboxStatistics | Select-object DisplayName,ItemCount,StorageLimitStatus,@{Name='Size';Expression={$_.TotalItemSize.Value.ToMB()}} | Sort-Object Size -Descending

    Siehe:

    http://social.technet.microsoft.com/Forums/en-US/fde2906e-f08a-4a77-a3a9-7d5a705f1112/getmailboxstatistics-totalitemsize-in-mb-exchange-2010?forum=exchange_serverde

    Achtung: In dem oben genannten Thread wird das Cmdlet Format-List benutzt. Die Format-xxx Cmdlets sind zur Datenverarbeitung nicht geeignet, da Sie nur Format Informationen zur Darstellung am Bildschirm (oder zur Ausgabe in Textdateien) herstellen und keine Daten!

    Man sollte die Format-xxx Cmdlets möglichst Nie benutzen! Select-Object ist da meistens die richtige Wahl!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Mittwoch, 13. November 2013 10:34
  • Ich habe 0 Ahnung von Exchange! Aber ich kann die Internet Suchmaschinen bedienen  ;-)

    Suchmaschine??? ;-)

    So müsste es gehen wenn man aus dem TotalItemSize Objekt den Value heraus holt und ihn in MB umrechnen lässt :

    Get-Mailbox | Get-MailboxStatistics | Select-object DisplayName,ItemCount,StorageLimitStatus,@{Name='Size';Expression={$_.TotalItemSize.Value.ToMB()}} | Sort-Object Size -Descending
    Eben dies geht nicht, da auf das De-Serialisierte TotalItemSize die Methode Value.ToMB() nicht mehr angewendet werden kann.
    Mittwoch, 13. November 2013 11:01
  • Ok ! Stimmt ja!

    Da habe ich gepennt! Sorry!

    Kannst du ein Deserialisiertes Objekt (ohne Userdaten) mal hier Posten?

    Vielleicht kann ich dann wieder mitreden ;-)


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Mittwoch, 13. November 2013 11:07
  • Kannst du ein Deserialisiertes Objekt (ohne Userdaten) mal hier Posten?

    Hier die Ausgabe von Get-Mailboxstatistics -id foo | Get-Member

       TypeName: Deserialized.Microsoft.Exchange.Data.Mapi.MailboxStatistics
    
    Name                    MemberType   Definition
    ----                    ----------   ----------
    ToString                Method       string ToString(), string ToString(string format, System.IFormatProvider formatProvider), string
    PSComputerName          NoteProperty System.String PSComputerName=swk-exc02
    PSShowComputerName      NoteProperty System.Boolean PSShowComputerName=False
    RunspaceId              NoteProperty System.Guid RunspaceId=67cc3f2b-554e-463e-9c0e-b604dadcc0c0
    AssociatedItemCount     Property     System.UInt32 {get;set;}
    Database                Property     System.String {get;set;}
    DatabaseName            Property     System.String {get;set;}
    DeletedItemCount        Property     System.UInt32 {get;set;}
    DisconnectDate          Property      {get;set;}
    DisconnectReason        Property      {get;set;}
    DisplayName             Property     System.String {get;set;}
    Identity                Property     System.String {get;set;}
    IsArchiveMailbox        Property     System.Boolean {get;set;}
    IsQuarantined           Property     System.Boolean {get;set;}
    IsValid                 Property     System.Boolean {get;set;}
    ItemCount               Property     System.UInt32 {get;set;}
    LastLoggedOnUserAccount Property     System.String {get;set;}
    LastLogoffTime          Property     System.DateTime {get;set;}
    LastLogonTime           Property     System.DateTime {get;set;}
    LegacyDN                Property     System.String {get;set;}
    MailboxGuid             Property     System.Guid {get;set;}
    MailboxTableIdentifier  Property     System.String {get;set;}
    MapiIdentity            Property     System.String {get;set;}
    MoveHistory             Property      {get;set;}
    ObjectClass             Property     System.String {get;set;}
    OriginatingServer       Property     System.String {get;set;}
    ServerName              Property     System.String {get;set;}
    StorageLimitStatus      Property     System.String {get;set;}
    TotalDeletedItemSize    Property     System.String {get;set;}
    TotalItemSize           Property     System.String {get;set;}

    Mittwoch, 13. November 2013 11:58
  • Neeee !Nicht Get-member!

    Ein Deserialisiertes Objekt wird durch XML beschrieben!
    Ich brauche die XML (Text) Beschreibung des Objektes, da ich keinen Exchange Server habe, kann ich die Objekte nicht selbst herstellen.

    Mach mal folgendes:

    Get-Mailbox | Get-MailboxStatistics | Select-Object -First 1 | Export-Clixml  "$env:temp\test.xml"
    Write-host "Datei $env:temp\test.xml wurde erstellt. Ich öffne Sie"
    & Notepad "$env:temp\test.xml"

    Poste den Inhalt von der erzeugten XML Datei (Notepad).


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Mittwoch, 13. November 2013 12:46
  • Was die NSA nicht sehen soll, ist ge-X-t. ;-)

    Die Einheiten von TotalItemSize variieren je nach Postfachgrösse von KB zu MB zu GB. Der Wert in Klammern ist immer in Bytes.

    <Objs Version="1.1.0.1" xmlns= "http://schemas.microsoft.com/powershell/2004/04">
      <Obj RefId="0">
        <TN RefId="0">
          <T>Selected.System.Management.Automation.PSCustomObject</T>
          <T>Deserialized.Microsoft.Exchange.Data.Mapi.MailboxStatistics</T>
          <T>Deserialized.Microsoft.Exchange.Data.Mapi.MailboxEntry</T>
          <T>Deserialized.Microsoft.Exchange.Data.Mapi.MessageStore</T>
          <T>Deserialized.Microsoft.Exchange.Data.Mapi.MapiObject</T>
          <T>Deserialized.Microsoft.Exchange.Data.ConfigurableObject</T>
          <T>Deserialized.System.Object</T>
        </TN>
        <ToString>Microsoft.Exchange.Data.Mapi.MailboxStatistics</ToString>
        <Props>
          <U32 N="AssociatedItemCount">95</U32>
          <U32 N="DeletedItemCount">0</U32>
          <Nil N="DisconnectDate" />
          <Nil N="DisconnectReason" />
          <S N="DisplayName">foo bar</S>
          <U32 N="ItemCount">70</U32>
          <Nil N="LastLoggedOnUserAccount" />
          <Nil N="LastLogoffTime" />
          <Nil N="LastLogonTime" />
          <S N="LegacyDN">/O=XXX/OU=XXX/CN=RECIPIENTS/CN=FOOBAR</S>
          <G N="MailboxGuid">XXX</G>
          <S N="ObjectClass">Mailbox</S>
          <S N="StorageLimitStatus">BelowLimit</S>
          <S N="TotalDeletedItemSize">0 B (0 bytes)</S>
          <S N="TotalItemSize">260 KB (266,202 bytes)</S>
          <S N="MailboxTableIdentifier">XXX</S>
          <S N="Database">DB01</S>
          <S N="ServerName">XXX</S>
          <S N="DatabaseName">DB01</S>
          <Nil N="MoveHistory" />
          <B N="IsQuarantined">false</B>
          <B N="IsArchiveMailbox">false</B>
          <S N="Identity">XXX</S>
          <S N="MapiIdentity">XXX</S>
          <S N="OriginatingServer">XXX.de</S>
          <B N="IsValid">true</B>
        </Props>
        <MS>
          <S N="PSComputerName">XXX</S>
          <G N="RunspaceId">XXX</G>
          <B N="PSShowComputerName">false</B>
        </MS>
      </Obj>
    </Objs>

    Mittwoch, 13. November 2013 13:08
  • Da kommst du an Textverarbeitung nicht vor bei!

    Get-Mailbox | Get-MailboxStatistics | Select-object DisplayName,ItemCount,StorageLimitStatus,@{Name='Size';Expression={$_.TotalItemSize.ToString().Split("(")[1].Split(" ")[0].Replace(",","")}} | Sort-Object Size -Descending

    Mehrere Leute haben auch diese Problem.

    Sieh hier: http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/27/get-exchange-online-mailbox-size-in-gb.aspx


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert Thomas_Fey Donnerstag, 14. November 2013 08:41
    Mittwoch, 13. November 2013 15:40
  • Da kommst du an Textverarbeitung nicht vor bei

    Na gut, das nehme ich dann. (seufz)  ;-)

    Ist halt etwas "unelegant".
    Schön wäre eine Lösung gewesen, bei der die Ausführung und Sortierung auf dem Exchange laufen würde, und ich auf der Client Shell nur die Ergebnisse zurückbekomme.
    Schade, dass das die PoSh nicht hergibt.
    Aber Du hast mir auf jeden Fall weitergeholfen, Danke.

    Thomas

    Donnerstag, 14. November 2013 08:41
  • Da PowerShell so schön mit Objekten und echten Daten Arbeitet, versuche ich auch immer die Fehleranfällige Textverarbeitung zu vermeiden.

    Manchmal muss man halt ... ;-)

    Schön wenn es hilft.


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Donnerstag, 14. November 2013 09:22