PowerShell syntax error on { used in foreach loop -
i found awesome code on page has syntax error when trying use powershell version 3 or 4 can fix issues?
http://jeffwouters.nl/index.php/2012/06/scvmm-custom-inventory-about-vm-and-vhd-with-powershell/
$vms = get-vm -vmmserver localhost | sort-object -property name -descending “<html><head><title>vm inventory</title></head><body><table border=1>” | out-file $env:temp\vminventory.html “<tr><td>vm name</td><td>vm memory</td><td>vhd name</td><td>vhd length</td><td>vhd maximum</td><td>vhd available</td><td>vhd free %</td></tr>” | out-file $env:temp\vminventory.html -append foreach ($vm in $vms) { “<tr><td>”+$vm.name+”</td><td>”+$vm.memory+”mb</td><td>.</td><td>.</td><td>. </td><td>.</td><td>.</td></tr>” | out-file $env:temp\vminventory.html -append foreach ( $vhd in $vm.virtualharddisks) { $vhdlength = ($vhd.size / 1gb) $vhdsize = “{0:n2}” -f $vhdlength if ($vhd.vhdtype -eq “dynamicallyexpanding”) { $backgroundcolor = “#ff0000″ $vhdmaximumsize = “{0:n2}” -f ($vhd.maximumsize / 1gb) $vhdavailable = “{0:n2}” -f (($vhd.maximumsize – $vhd.size) /1gb) $vhdfree = “{0:n2}” -f (100 – (($vhd.size * 100) / $vhd.maximumsize)) “<tr><td>.</td><td>.</td> <td bgcolor=”+$backgroundcolor+”>”+$vhd.name+”</td> <td bgcolor=”+$backgroundcolor+”>”+$vhdsize+”gb</td> <td bgcolor=”+$backgroundcolor+”>”+$vhdmaximumsize+”</td> <td bgcolor=”+$backgroundcolor+”>”+$vhdavailable+”</td> <td bgcolor=”+$backgroundcolor+”>”+$vhdfree+” %</td></tr>” | out-file $env:temp\vminventory.html -append } else { “<tr><td>.</td><td>.</td><td>”+$vhd.name+”</td><td>”+$vhdsize+”gb</td><td>.< /td><td>.</td><td>.</td></tr>” | out-file $env:temp\vminventory.html -append } } “<tr>” | out-file $env:temp\vminventory.html -append } “</table><body></html>” | out-file $env:temp\vminventory.html -append invoke-expression $env:temp\vminventory.html
the issue appears smart quotes. took time indent code makes more readable. cannot run myself syntax appears correct now.
$vms = get-vm -vmmserver localhost | sort-object -property name -descending "<html><head><title>vm inventory</title></head><body><table border=1>" | out-file $env:temp\vminventory.html "<tr><td>vm name</td><td>vm memory</td><td>vhd name</td><td>vhd length</td><td>vhd maximum</td><td>vhd available</td><td>vhd free %</td></tr>" | out-file $env:temp\vminventory.html -append foreach ($vm in $vms){ "<tr><td>"+$vm.name+"</td><td>"+$vm.memory+"mb</td><td>.</td><td>.</td><td>. </td><td>.</td><td>.</td></tr>" | out-file $env:temp\vminventory.html -append foreach ( $vhd in $vm.virtualharddisks){ $vhdlength = ($vhd.size / 1gb) $vhdsize = "{0:n2}" -f $vhdlength if ($vhd.vhdtype -eq "dynamicallyexpanding"){ $backgroundcolor = "#ff0000" $vhdmaximumsize = "{0:n2}" -f ($vhd.maximumsize / 1gb) $vhdavailable = "{0:n2}" -f (($vhd.maximumsize – $vhd.size) /1gb) $vhdfree = "{0:n2}" -f (100 – (($vhd.size * 100) / $vhd.maximumsize)) "<tr><td>.</td><td>.</td> <td bgcolor="+$backgroundcolor+">"+$vhd.name+"</td> <td bgcolor="+$backgroundcolor+">"+$vhdsize+"gb</td> <td bgcolor="+$backgroundcolor+">"+$vhdmaximumsize+"</td> <td bgcolor="+$backgroundcolor+">"+$vhdavailable+"</td> <td bgcolor="+$backgroundcolor+">"+$vhdfree+" %</td></tr>" | out-file $env:temp\vminventory.html -append }else{ "<tr><td>.</td><td>.</td><td>"+$vhd.name+"</td><td>"+$vhdsize+"gb</td><td>.< /td><td>.</td><td>.</td></tr>" | out-file $env:temp\vminventory.html -append } } "<tr>" | out-file $env:temp\vminventory.html -append } "</table><body></html>" | out-file $env:temp\vminventory.html -append invoke-expression $env:temp\vminventory.html if feel code looks benefit creating custom object , using convertto-html. yes lose colour formatting fyi.
Comments
Post a Comment