Below is some powercli code, I think this is a powershell issue (if not I can find powercli forums).
It creates several different tables, but when ran as a script the tables do not display correctly, they get progressively worse until it’s just display the first column.
The main issues is displaying $alltemplates, $freespaceDS, $allfolders and $allclusters to output to the console when ran from a .ps1 file.
function Get-FolderPath{
param(
[parameter(valuefrompipeline = $true,
position = 0,
HelpMessage = "Enter a folder")]
[VMware.VimAutomation.ViCore.Impl.V1.Inventory.FolderImpl[]]$Folder,
[switch]$ShowHidden = $false
)
begin{
$excludedNames = "Datacenters","vm","host"
}
process{
$Folder | %{
$fld = $_.Extensiondata
$fldType = "yellow"
if($fld.ChildType -contains "VirtualMachine"){
$fldType = "blue"
}
$path = $fld.Name
while($fld.Parent){
$fld = Get-View $fld.Parent
if((!$ShowHidden -and $excludedNames -notcontains $fld.Name) -or $ShowHidden){
$path = $fld.Name + "\" + $path
}
}
$row = "" | Select Name,Path,Type
$row.Name = $_.Name
$row.Path = $path
$row.Type = $fldType
$row
}
}
}
$start = get-date
$displayname = Read-host "Enter the VM name as it will appear in vCenter"
$computername = read-host "Enter the server name"
[int]$vcpu = Read-host "Enter the number of vCPU sockets"
[int]$cores = read-host "Enter the number of vCPU cores"
[int]$numcpus = $vcpu * $cores
[int]$memMB = Read-host "Enter the RAM in GB"
[int]$memMB = $memmb * 1024
$netdns=@()
#select your template
$global:counter = 0
$allTemplates = get-template | select-object @{n='Number';exp={$global:counter; $global:counter++} }, name
#displays all templates
cls
$alltemplates
$x = read-host "Enter the name of the template you want to use"
$sourcetemplate = get-template ($allTemplates[$x]).name
#assigning a cluster
$global:counter = 0
$allclusters = get-cluster | select @{n='Number'; e={$global:counter; $global:counter++}}, @{n='Name'; e={$_.name}}
#all clusters
cls
$allclusters
$x = read-host "Select a cluster for this VM"
$cluster = get-cluster ($allclusters[$x]).name
#Select Datastore Section
$global:counter = 0
#creates a table from highest freespace to lowest
$freespaceDS = get-datastore | ?{$_.name -notlike "*local*"}|sort-object freespacegb -descending |
select-object @{n='Number';exp={$global:counter; $global:counter++} },
name, @{n='FreeSpaceGB'; exp={[math]::round($_.freespacegb,2)}}, CapacityGB
#actually lists the DS
cls
$freespaceDS
$x = read-host "Please select the datastore you would like to use"
$datastore = ($freespaceDS[$x]).name
#
$global:counter = 0
$allfolders = Get-Folderpath (get-folder | ?{$_.name -notmatch "datacenters|VM|host"}) | select @{n='Number'; exp={$global:counter; $global:counter++}},@{n='path'; exp={$_.path}}
#
cls
$allfolders
$x = read-host "Select a folder to place the VM in"
$fullpath = $allfolders[$x] | % {$_.path} | % {$_.split("\")}
$DCname = get-datacenter $fullpath[0]
foreach($folder in ($fullpath)[1..(($fullpath).length -1)])
{
$dcname = $dcname | get-folder $folder
}
when it hits the first table it looks correct:
Number Name
------ ----
0 Windows 2012 R2
1 Windows_2012_R2
Enter the name of the template you want to use:
When it hits the cluster section it loses it’s header
0 aaaDCLST02
1 aaaDMZCLST01
2 aaaDCLST03
3 aaaDCLST01
Select a cluster for this VM:
And when it hits it’s datastore section it loses the freespacegb/capacitygb columns and on the $allfolders it just lists the number column (no header, no other columns).