I promise I’ve banged my head on this one for a good while, but just not able to get around it.
$vms = get-cluster N-MMK-COOP-151-166 | Get-VM
foreach ($vm in $vms) {
get-stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value | export-csv -Path B:\scripts\GetHostStats$vm.csv
}
The above creates a csv file for each VM. I’d like to have the data for each VM just be a new column in the same csv file. Thanks for any thoughts!
To capture the output of the loop, you assign a variable to it:
$vms = Get-Cluster N-MMK-COOP-151-166 | Get-VM
$results = foreach ($vm in $vms) {
Get-Stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value
}
$results | Export-Csv -Path B:\scripts\GetHostStats\Stats.csv -NoTypeInformation
However, per the documentation on Get-Stat, you can pass VM’s ByValue for Entity. You should be able to do something like this:
$results = Get-Cluster N-MMK-COOP-151-166 |
Get-VM |
Get-Stat -Start 9/27/2016 -Finish 10/18/2016 -CPU |
Select Value
$results | export-csv -Path B:\scripts\GetHostStats\Stats.csv -NoTypeInformation
$vms = get-cluster N-MMK-COOP-151-166 | Get-VM
$values = foreach ($vm in $vms) {get-stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value}
$values | export-csv -Path B:\scripts\GetHostStats\$vm.csv
Thank you for the answers. These do place all the results into one csv file, but the results are appended to the same/first column. I’m trying to place each new set of results into a new column within the same csv.
This is an odd method of storing output. However I’m sure you must have some reason behind it. I could not test below code (due to lack of environment) but you should be able to use something like this:
$vms = Get-Cluster N-MMK-COOP-151-166 | Get-VM
$results = New-Object -TypeName PSObject
foreach ($vm in $vms) {
$Value = Get-Stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value
$results | Add-Member -MemberType NoteProperty -Name $vm.name -Value $Value
}
$results | Export-csv -Path B:\scripts\GetHostStats\Stats.csv
thanks, for the time on this. I’d be open to different storage methods. your code cycles through successfully, but the csv has this data. It does nicely in placing each VM into it’s own column, but wondering why the $Value field is not picked up.
EI0001VAPP FCADBSMMK1 VROBUSTENGQA1
System.Object System.Object System.Object
Here’s how it comes back when run straight from powercli//powershell
PowerCLI B:\scripts\GetHostStats\merge> Get-Stat -Entity FCADBSMMK1 -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value
Value
2.62
2.71
2.5
2.61
2.47
2.45
2.46
5.42
2.93
Just modify last line:
$results | Export-csv -Path B:\scripts\GetHostStats\Stats.csv -NoTypeInformation
hmm. i’m missing something. this is still producing the same results:
$vms = Get-Cluster L-WLK-FSLab-2 | Get-VM
$results = New-Object -TypeName PSObject
foreach ($vm in $vms) {
$Value = Get-Stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value
$results | Add-Member -MemberType NoteProperty -Name $vm.name -Value $Value
}
$results | Export-csv -NoTypeInformation -Path B:\scripts\GetHostStats\merge\Stats.csv
when I add in a write-host I do get values. not sure why it’s failing to come through with the export-csv.
EIWLKHTLVM001
@{Value=0.74} @{Value=0.66} @{Value=0.5} @{Value=0.36} @{Value=0.28} @{Value=0.24} @{Value=1.6} @{Value=155} @{Value=137} @{Value=105} @{Value=75} @{Value=59} @{Value=50} @{Value=333}
foreach ($vm in $vms) {
$Value = Get-Stat -Entity $vm -Start 9/27/2016 -Finish 10/18/2016 -CPU | Select Value
$results | Add-Member -MemberType NoteProperty -Name $vm.name -Value $Value
write-host $vm.name
write-host $Value
}
here’s a write-host though for $results
PowerCLI B:\scripts\GetHostStats\merge> .\8merge.ps1
@{BIGIPTEST=}
@{BIGIPTEST=; EIWLKHTLVM009=System.Object}
@{BIGIPTEST=; EIWLKHTLVM009=System.Object; EIWLKHTLVM001=System.Object}
This will give me the values, but running into issues trying to get the values into an array and then exporting them into a csv file.
$vms = Get-Cluster L-WLK-FSLab-2 | Get-VM
foreach ($vm in $vms) {
$values = Get-Stat -Entity $vm -Start 10/23/2016 -Finish 10/23/2016 -CPU | Select Name, @{Name=$vm.Name;Expression={[string]::join(“;”, ($_.Value))}}
}
PowerCLI B:\scripts\GetHostStats\merge> .\9merge.ps1
@{Name=; BIGIPTEST=6.09} @{Name=; BIGIPTEST=316}
@{Name=; EIWLKHTLVM009=4.39} @{Name=; EIWLKHTLVM009=914}
@{Name=; EIWLKHTLVM001=0.8} @{Name=; EIWLKHTLVM001=168}