by andrewv88 at 2012-12-04 22:59:41
hello,by nohandle at 2012-12-05 00:58:03
i tried to get my output in table format wihtout any success,
[code2=powershell]$vms = "testvm", "testvm1"
foreach ($vm in $vms){
$dbname = (get-datastore -vm $vm).name
$dbsize = (get-datastore -vm $vm).CapacityGB
$vmos = (get-vmguest -vm $vm).OSFullName
}[/code2]
i want to get my output in this format
[code2=powershell]name dbname dbsize OS
-------- ------------- -------------- --------
testvm nfs_w2k8 1.2Tb Windows 2008R2
testvm1 nfs_w2k8 1.2Tb Windows 2008R2[/code2]
thanks
You have to create a custom object. If you are on powershell v2 I’l recommend the Select-object way beause it sorts properties unlike the new-object using hashtable as property.by nohandle at 2012-12-05 01:03:40
Excellent article by Don to learn how to do it: http://technet.microsoft.com/en-us/maga … 50381.aspx
Here is the fish.by andrewv88 at 2012-12-05 01:49:52"" | Select-Object @{n="name";e={$vm}},@{n="dbName";e={$dbname}},@{n="dbSize";e={$dbsize}},@{n="OS";e={$vmos}}
i tried to do new objectby RichardSiddaway at 2012-12-05 04:20:24
[code2=powershell]$vms = "testvm", "testvm1"
$object = new-object Object
foreach ($vm in $vms){
$object | add-member NoteProperty "DB Name" $vm
$object | add-member NoteProperty "DB Name" (get-datastore -vm $vm).name
$object | add-member NoteProperty "DB Size" (get-datastore -vm $vm).CapacityGB
$object | add-member NoteProperty "OS Name" (get-vmguest -vm $vm).OSFullName
}[/code2]
but input has only the property of last vm
Its because you aren’t outputting the object you create. You overwrite on each loop through foreachby andrewv88 at 2012-12-05 04:24:48
i tried to use array for saving $obj for each loop, outside the foreach loopby nohandle at 2012-12-05 04:41:28
$myArray += $obj
it wasn’t work
I think the solution shown by me should work when placed inside the foreach loop.by andrewv88 at 2012-12-05 04:45:13
i solved it, but the way is not good enough.by megamorf at 2012-12-05 08:20:25
[code2=powershell]$vms = "testvm", "testvm1"
$myArray = @()
$object = new-object Object
foreach ($vm in $vms){
$object | add-member NoteProperty "DB Name" $vm
$object | add-member NoteProperty "DB Name" (get-datastore -vm $vm).name
$object | add-member NoteProperty "DB Size" (get-datastore -vm $vm).CapacityGB
$object | add-member NoteProperty "OS Name" (get-vmguest -vm $vm).OSFullName
$myArray += $obj
$object = new-object Object
}[/code2]
$myArray now contain properties from 2 vms and i can you Format-table
by andrewv88 at 2012-12-05 12:10:25$vms = "testvm", "testvm1"
$myArray = @()
foreach ($vm in $vms){
$name = $vm.name
$dbname = (get-datastore -vm $vm).name
$dbsize = (get-datastore -vm $vm).CapacityGB
$vmos = (get-vmguest -vm $vm).OSFullName
$myArray += "" | Select-Object @{n="name";e={$name}},@{n="dbName";e={$dbname}},@{n="dbSize";e={$dbsize}},@{n="OS";e={$vmos}}
}
$myArray | format-table -autosize
What are you trying to achieve? You collect objects in an array and can decide how you want to output it by using the format-Cmdlets like format-list, format-table, etc (get-command -verb format)
megamorf thanks !by megamorf at 2012-12-05 12:31:49
[quote="andrewv88"]megamorf thanks ![/quote]
Well, I quickly wrote that on my way home. I’d do it with a hashtable like this (I like to have clean code so that my colleagues can understand what’s going on):$vms = "testvm", "testvm1"
$myArray = @()
foreach ($vm in $vms){
$properties = @{$name = $vm.name;
$dbname = (get-datastore -vm $vm).name;
$dbsize = (get-datastore -vm $vm).CapacityGB;
$vmos = (get-vmguest -vm $vm).OSFullName
}
$myArray += New-Object –TypeName PSObject –Prop $properties
}
$myArray | format-table -autosize