I'm connecting to multiple vCenters and obtaining the vm's and attempting to export results from Get-View to a CSV file. The only results that I get when I run my script is the headers.
Could someone point out what I'm doing wrong in the code:
#CSV Path and file name to be created
$ExportFilePath = "c:\temp\VMInfo-MultipleVCs.csv"
#Connect to the multiple vCenters
Write-Host "Connecting to vCenters" -ForegroundColor Cyan
$VIServers = Get-Content -Path C:\temp\vcenters.txt
$c = Get-Credential
$VIServers = Connect-VIServer $VIServer -Credential $c -warningaction 0
ForEach ($VIServer in $VIServers) {
Write-Host "Gathering Statistics for VMs in $VIServer"
$table = @()
$vm = Get-VM
ForEach ($vm in $VMs) {
$Report = "" | Select VIServer,Name,DNS_Name,OS,PowerState,Template_Status,IPAddress,LastBootTime,Notes
$Report.VIServer = $_.VIServer
$Report.Name = (get-View $vm.Name)
$Report.DNS_Name = (get-View $vm.Guest.HostName)
$Report.OS = (get-View $vm.Guest.GuestFullName)
$Report.PowerState = (get-View $vm.Summary.Runtime.powerstate)
$Report.Template_Status = (get-View $vm.Summary.Config.Template)
$Report.IPAddress = (get-View $vm.Summary.IpAddress)
$Report.LastBootTime = (get-View $vm.Summary.Runtime.BootTime)
$Report.Notes = (get-View $vm.config.annotation)
$table += $Report
}
}
$table | Export-Csv $ExportFilePath -NoTypeInformation
Disconnect-VIServer -Confirm:$False
Thanks so much!
Try with this version
$ExportFilePath = "c:\temp\VMInfo-MultipleVCs.csv"
#Connect to the multiple vCenters
Write-Host "Connecting to vCenters" -ForegroundColor Cyan
$VIServerNames = Get-Content -Path C:\temp\vcenters.txt
$c = Get-Credential
$VIServers = Connect-VIServer -Server $VIServerNames -Credential $c -warningaction 0
$table = @()
ForEach ($VIServer in $global:DefaultVIServers) {
Write-Host "Gathering Statistics for VMs in $($VIServer.Name)"
$vms = Get-VM -Server $VIServer
ForEach ($vm in $VMs) {
$row = "" | Select VIServer,Name,DNS_Name,OS,PowerState,Template_Status,IPAddress,LastBootTime,Notes
$row.VIServer = $VIServer.Name
$row.Name = $vm.Name
$row.DNS_Name = $vm.Guest.ExtensionData.HostName
$row.OS = $vm.Guest.OSFullName
$row.PowerState = $vm.PowerState
$row.Template_Status = $vm.ExtensionData.Summary.Config.Template
$row.IPAddress = $vm.Guest.IpAddress -join '|'
$row.LastBootTime = $vm.ExtensionData.Summary.Runtime.BootTime
$row.Notes = $vm.ExtensionData.config.annotation
$table += $row
}
}
$table | Export-Csv $ExportFilePath -NoTypeInformation
Disconnect-VIServer -Confirm:$False
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
You should probably initialise the resulting $table outside the loop.
The resulting VMs per vCenter should be collected in $vms, not $vm.
Not sure why you have a Get-View for most properties, this can also be reached via the ExtensionData property.
$ExportFilePath = "c:\temp\VMInfo-MultipleVCs.csv"
#Connect to the multiple vCenters
Write-Host "Connecting to vCenters" -ForegroundColor Cyan
$VIServers = Get-Content -Path C:\temp\vcenters.txt
$c = Get-Credential
$VIServers = Connect-VIServer $VIServer -Credential $c -warningaction 0
$table = @()
ForEach ($VIServer in $VIServers) {
Write-Host "Gathering Statistics for VMs in $VIServer"
$vm = Get-VM -Server $VIServer
ForEach ($vm in $VMs) {
$row = "" | Select VIServer,Name,DNS_Name,OS,PowerState,Template_Status,IPAddress,LastBootTime,Notes
$row.VIServer = $VIServer.Name
$row.Name = $vm.Name
$row.DNS_Name = $vm.Guest.HostName
$row.OS = $vm.Guest.GuestFullName
$row.PowerState = $vm.PowerState
$row.Template_Status = $vm.ExtensionData.Summary.Config.Template
$row.IPAddress = $vm.ExtensionData.Summary.IpAddress
$row.LastBootTime = $vm.ExtensionData.Summary.Runtime.BootTime
$row.Notes = $vm.ExtensionData.config.annotation
$table += $row
}
}
$table | Export-Csv $ExportFilePath -NoTypeInformation
Disconnect-VIServer -Confirm:$False
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thanks so much for the quick reply.
In response to "Not sure why you have a Get-View for most properties". It's because I'm a total novice with scripting and trying to make some progress. aka rookie
The CSV file is now returning without any data. Not sure why. I've been trying to resolve it but not having any luck.
Try with this version
$ExportFilePath = "c:\temp\VMInfo-MultipleVCs.csv"
#Connect to the multiple vCenters
Write-Host "Connecting to vCenters" -ForegroundColor Cyan
$VIServerNames = Get-Content -Path C:\temp\vcenters.txt
$c = Get-Credential
$VIServers = Connect-VIServer -Server $VIServerNames -Credential $c -warningaction 0
$table = @()
ForEach ($VIServer in $global:DefaultVIServers) {
Write-Host "Gathering Statistics for VMs in $($VIServer.Name)"
$vms = Get-VM -Server $VIServer
ForEach ($vm in $VMs) {
$row = "" | Select VIServer,Name,DNS_Name,OS,PowerState,Template_Status,IPAddress,LastBootTime,Notes
$row.VIServer = $VIServer.Name
$row.Name = $vm.Name
$row.DNS_Name = $vm.Guest.ExtensionData.HostName
$row.OS = $vm.Guest.OSFullName
$row.PowerState = $vm.PowerState
$row.Template_Status = $vm.ExtensionData.Summary.Config.Template
$row.IPAddress = $vm.Guest.IpAddress -join '|'
$row.LastBootTime = $vm.ExtensionData.Summary.Runtime.BootTime
$row.Notes = $vm.ExtensionData.config.annotation
$table += $row
}
}
$table | Export-Csv $ExportFilePath -NoTypeInformation
Disconnect-VIServer -Confirm:$False
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
That's worked.
Thanks so much for your help. I really appreciate it!!
You're welcome.
If you have further questions, feel free to ask
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference