Benutzer mit den meisten Antworten
Measure-Object on multiple Measure-Objects

Frage
-
Hi,
I have a problem and I hope you can help me.
What I want to do: I want to get the monthly peak of ESXi CPU usage.
What I already did: I wrote a script to check every day ESXi CPU usage with VMware PowerCLI and run "Measure-Object -Maximum" to geht the daily peak. Then I export this "Measure-Object"-Object with "Export-Clixml".
# Global $cluster = "name" $start = (Get-Date -hour 0 -minute 0 -second 0).AddDays(-1) $finish = (Get-Date -hour 23 -minute 59 -second 59).AddDays(-1) $FileName = get-date -uformat "%Y-%m-%d" # # Cpu peak of last day $test = Get-Stat -Entity (get-vmhost -location (get-cluster -name $cluster)) -Stat Cpu.Usage.Average -Start $start -Finish $finish -IntervalMins 5 | Measure-Object -Property "Value" -Maximum # # Export Export-Clixml -Path $env:TEMP\xml\$FileName.xml -inputobject $test
My Problem: Now I need a monthly script that import all objects and figure out the monthly peak. My first idea was to read all files into an array. Didn't work. My second idea was to create a new PSObject and fill this with the data. Didn't work either. I understand why the first solution didn't work. But I don't get the problem on the second solution.
$month = @() foreach ($file in (Get-ChildItem $env:TEMP\xml\)) {$month += Import-Clixml -Path $env:TEMP\xml\$file} write-output $month Measure-Object -InputObject $month -Property Maximum -Maximum # ---------- Output ---------- # write-output $month <# Count : 803 Average : Sum : Maximum : 14,9300003051758 Minimum : Property : Value Count : 803 Average : Sum : Maximum : 15,9300003051758 Minimum : Property : Value Count : 803 Average : Sum : Maximum : 13,9300003051758 Minimum : Property : Value Count : 803 Average : Sum : Maximum : 5,93000030523578 Minimum : Property : Value ># # Measure-Object -InputObject $month -Property Maximum -Maximum <# Measure-Object : Die Maximum-Eigenschaft kann in keiner Eingabe eines Objekts gefunden werden. Bei Zeile:1 Zeichen:15 + Measure-Object <<<< -InputObject $month -Property Maximum -Maximum + CategoryInfo : InvalidArgument: (:) [Measure-Object], PSArgumentException + FullyQualifiedErrorId : GenericMeasurePropertyNotFound,Microsoft.PowerShell.Commands.MeasureObjectCommand #>
function New-Dataset { New-Object PSObject -Property @{ Date = '' Test = 0 } } $month = @() foreach ($file in (Get-ChildItem $env:TEMP\xml\)) { $temp = Import-Clixml -Path $env:TEMP\xml\$file $dataset = New-Dataset $dataset.Date = $file.Name.Substring(0,10) $dataset.Test= $temp.Maximum $month += $dataset } write-output $month Measure-Object -InputObject $month -Property Test -Maximum # ---------- Output ---------- # write-output $month <# Test Date ---- ---- 14,9300003051758 2012-03-04 15,9300003051758 2012-03-05 13,9300003051758 2012-03-06 5,93000030523578 2012-03-07 #> #Measure-Object -InputObject $month -Property Test -Maximum <# Measure-Object : Die Test-Eigenschaft kann in keiner Eingabe eines Objekts gefunden werden. Bei Zeile:1 Zeichen:15 + Measure-Object <<<< -InputObject $month -Property Test -Maximum + CategoryInfo : InvalidArgument: (:) [Measure-Object], PSArgumentException + FullyQualifiedErrorId : GenericMeasurePropertyNotFound,Microsoft.PowerShell.Commands.MeasureObjectCommand #>
I'm sorry about the German error messages, it's a German installation. The message "Die Test-Eigenschaft kann in keiner Eingabe eines Objekts gefunden werden." does mean "Could not find any Test-Property in the object."
Thanks for your help!
Cailore
- Bearbeitet Cailore Donnerstag, 8. März 2012 13:12
Antworten
-
Der Schalter "-inputobject" verarbeitet nicht die einzelnen Objekte in deinem Array, statt dessen wird $month als einzelnes Objekt behandelt. Das hat aber die "test"-Eigenschaft nicht, daher der Fehler.
Wenn du die Objekte in $month über die Pipeline einzeln an measure-object fütterst, gehts:$month | Measure-Object -property test -Maximum -Minimum -Sum | Out-Host
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 8. März 2012 14:22
- Als Antwort markiert Cailore Donnerstag, 8. März 2012 14:57
Alle Antworten
-
Der Schalter "-inputobject" verarbeitet nicht die einzelnen Objekte in deinem Array, statt dessen wird $month als einzelnes Objekt behandelt. Das hat aber die "test"-Eigenschaft nicht, daher der Fehler.
Wenn du die Objekte in $month über die Pipeline einzeln an measure-object fütterst, gehts:$month | Measure-Object -property test -Maximum -Minimum -Sum | Out-Host
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".
- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 8. März 2012 14:22
- Als Antwort markiert Cailore Donnerstag, 8. März 2012 14:57