2016-10-28 3 views
2

Ich habe ein PowerShell-Skript, das Garantieinformationen von einer API bezieht und sie in einer benutzerdefinierten WMI-Klasse speichert.Vergleichen Get-WmiObject (Datum) Ergebnisse

Ich bringe diese Daten dann in unser RMM-Tool, so dass es mit unserer PSA-Lösung synchronisiert wird und die Garantieenddaten für Erneuerungen automatisiert/aktualisiert werden.

Was ich zu der Zeit nicht berücksichtigt habe, war: mehrere Garantien mit denselben Eigenschaftenwerten. So macht mein Caveman-Skript das Ziehen von Werten where otherValue='specific text' weitgehend unwirksam.

Also, die WMI-Klasse eine Instanz pro Garantie hat, mit den folgenden Eigenschaften:

ComputerName: SUMGAIZPC 
EndDate: DD/MM/YYYY 
ItemNumber: 000-0000 
Model: PewterPro 2000 
ServiceLevelDescription: When We Get To It 
ServiceProvider: LOL 
ServiceTag: 1FSD51L;K 
StartDate: DD/MM/YYYY

So gehämmert ich etwas in der Nähe this out:

Get-WmiObject -Namespace root\Namespace -Class Warranty_Info | 
    Where-Object ServiceLevelDescription -eq "How About Right Now" | 
    Select-Object -ExpandProperty EndDate 
Get-WmiObject -Namespace root\Namespace -Class Warranty_Info | 
    Where-Object ServiceLevelDescritpion -eq "When We Get To It" | 
    Select-Object -ExpandProperty EndDate 
Get-WmiObject -Namespace root\Namespace -Class Warranty_Info | 
    Where-Object ServiceLevelDescription -eq "You're Not Gonna Like It" | 
    Select-Object -ExpandProperty EndDate 

Der Kicker ist, dass jeder Diese Befehle sind eigentlich Teil eines Skripts, das von unserem RMM-Tool (LabTech, für die vertrauten) ausgeführt wird und von ihrem PowerShell-Wrapper ausgeführt wird, sodass jeder Befehl einzeln ausgeführt wird und die Ergebnisse dann in einer Variablen namens %powershellresults% gespeichert werden. Ich setze dann die Werte für die Datenfelder innerhalb des RMM-Tools als die entsprechenden %powershellresults%.

Jetzt für das Problem. Manchmal wurde eine Garantie erneuert. Also, wenn ich die Informationen von der API bekomme, werden zwei Instanzen mit der gleichen ServiceLevelDescription, aber zwei völlig verschiedene EndDate Werte erstellt. Das gibt 12/15/2009 02/04/1974 an das Datenfeld statt nur 12/15/2009 zurück. Und da das Feld mit einem Datumsfeld in unserem PSA synchronisiert wird (nur das eine), brauche ich nur ein Datum.

Letztendlich muss ich alle Datenfelder (für jede unterschiedliche Art von Garantie) vergleichen, um zu bestimmen, welches Datum die große Zeit wird, aber das ist ein anderes Problem für einen anderen Tag.

Bei Bedarf kann ich alle/alle Skripte zur Verfügung stellen, die ich derzeit habe (etwa 5 oder 6).

+0

Hallo, wenn du könntest, wie würdest du zwischen den Daten wählen, die du bekommst? Der älteste oder der neueste? – sodawillow

+0

Was ist der Datentyp von 'EndDate'? Ist es 'DateTime' oder' String'? (Check mit '... |%' {$ _ GetType() Fullname..}) –

+0

@AnsgarWiechers - es ist ein String ist aus der API kommt, aber es kommt als yyyy-MM-dd, so dass ich konvertieren es Datetime verwenden zu MM-TT-JJJJ. Ich werde überprüfen und sehen, ob es so gespeichert ist. #sodawillow - Ich suche das Neueste. – Steve

Antwort

0

Ich werde es versuchen, indem sort in der EndDate Feld und select nur die erste Instanz zurückgegeben.

Wenn Sie das älteste Datum brauchen, können Sie dies versuchen:

Get-WmiObject -Namespace root\Namespace -Class Warranty_Info | 
    Where-Object ServiceLevelDescription -eq "You're Not Gonna Like It" | 
    Sort-Object EndDate | 
    Select-Object -First 1 | 
    Select-Object -ExpandProperty EndDate 

Wie für die neueste:

Get-WmiObject -Namespace root\Namespace -Class Warranty_Info | 
    Where-Object ServiceLevelDescription -eq "You're Not Gonna Like It" | 
    Sort-Object EndDate -Descending | 
    Select-Object -First 1 | 
    Select-Object -ExpandProperty EndDate 

Formatierung Tipp: Wählen Sie Code, drücken Sie Strg + K^_^

Edit: dann, wenn Sie die Daten für jede Art von Garantie zu vergleichen, dann können Sie jede der WMI-Aufruf zurückkehrt in einer separaten variablen speichern und vergleichen Sie.

+0

Wow, danke dafür!Ich werde es jetzt ausprobieren, um sicher zu gehen, dass ich es nicht dumme und immer noch die Geistesgegenwart habe, hierher zu kommen und dein Lob zu singen :) – Steve

+0

Das ist eine Option, ja. – sodawillow

+0

Nun, es dauerte ewig (das ist es, was ich bekomme, wenn ich versuche, von einem Laptop auf einem Campingplatz auf meinen PC zu gelangen!), Aber es wurde bestätigt! sodawillow ist mein Held mit einem Gehirn, das ich mir nur vorstellen kann, ist die Größe eines Stadions! Heiliger Strohsack. Ich kann dir nicht genug danken! – Steve

Verwandte Themen