Hi,
I am getting the below error while I run the below script, please help
$vCenters = @(
"vcenter01"
"vcenter02"
)
Connect-viserver -Server $vCenters
$vmInfo = Foreach ($vc in $global:DefaultVIServers)
{
Get-Folder DevTeam -Server $vc | Get-VM -Server $vc |
ForEach-Object -Process {
$obj = [HashTable]::new()
$obj.Add('Name', $_.Name)
$obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)
$obj.Add('VM PowerState', $_.PowerState)
$obj.Add('Operating System', $_.guest.OSFullName)
$obj.Add('Folder', $_.Folder.Name)
$obj.Add('IPAddress', '')
$obj.Add('VM_Hardware_Ver', $_.HardwareVersion)
$obj.Add('Tools_Version', $_.ExtensionData.Config.Tools.ToolsVersion)
$obj.Add('Tools Status', (if($_.Guest.Extensiondata.GuestState -eq "notRunning"){
"Not running" }
else{
$_.Guest.Extensiondata.ToolsVersionStatus.Replace("guestToolsNeedUpgrade","Out of date").Replace("guestToolsNotInstalled","Not installed").Replace("guestToolsCurrent","Current").Replace("guestToolsUnmanaged","Unmanaged")
}))
}
}
$vmInfo
Output Error
At D:\J_VMs_Tools_Info.ps1:37 char:35
+ "Not running" }
+ ~
Missing closing ')' in expression.
At D:\J_VMs_Tools_Info.ps1:37 char:35
+ "Not running" }
+ ~
Missing ')' in method call.
At D:\J_VMs_Tools_Info.ps1:38 char:9
+ else{
+ ~~~~
Unexpected token 'else' in expression or statement.
At D:\J_VMs_Tools_Info.ps1:26 char:29
+ ForEach-Object -Process {
+ ~
Missing closing '}' in statement block or type definition.
At D:\J_VMs_Tools_Info.ps1:24 char:1
+ {
+ ~
Missing closing '}' in statement block or type definition.
At D:\J_VMs_Tools_Info.ps1:40 char:10
+ }))
+ ~
Unexpected token ')' in expression or statement.
At D:\J_VMs_Tools_Info.ps1:40 char:11
+ }))
+ ~
Unexpected token ')' in expression or statement.
At D:\J_VMs_Tools_Info.ps1:41 char:5
+ }
+ ~
Unexpected token '}' in expression or statement.
At D:\J_VMs_Tools_Info.ps1:42 char:1
+ }
+ ~
Unexpected token '}' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingEndParenthesisInExpression
Try changing the code to
"vcenter01"
"vcenter02"
)
$vmInfo = Foreach ($vc in $global:DefaultVIServers)
{
Get-Folder DevTeam -Server $vc | Get-VM -Server $vc |
ForEach-Object -Process {
$obj = [HashTable]::new()
$obj.Add('Name', $_.Name)
$obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)
$obj.Add('VM PowerState', $_.PowerState)
$obj.Add('Operating System', $_.guest.OSFullName)
$obj.Add('Folder', $_.Folder.Name)
$obj.Add('IPAddress', '')
$obj.Add('VM_Hardware_Ver', $_.HardwareVersion)
$obj.Add('Tools_Version', $_.ExtensionData.Config.Tools.ToolsVersion)
$obj.Add('Tools Status', (&{if($_.Guest.Extensiondata.GuestState -eq "notRunning"){
"Not running"
}
else{
$_.Guest.Extensiondata.ToolsVersionStatus.Replace("guestToolsNeedUpgrade","Out of date").Replace("guestToolsNotInstalled","Not installed").Replace("guestToolsCurrent","Current").Replace("guestToolsUnmanaged","Unmanaged")
}}))
$obj
}
}
$vmInfo
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Try changing the code to
"vcenter01"
"vcenter02"
)
$vmInfo = Foreach ($vc in $global:DefaultVIServers)
{
Get-Folder DevTeam -Server $vc | Get-VM -Server $vc |
ForEach-Object -Process {
$obj = [HashTable]::new()
$obj.Add('Name', $_.Name)
$obj.Add('vCenter', ([uri]$_.ExtensionData.Client.ServiceUrl).Host)
$obj.Add('VM PowerState', $_.PowerState)
$obj.Add('Operating System', $_.guest.OSFullName)
$obj.Add('Folder', $_.Folder.Name)
$obj.Add('IPAddress', '')
$obj.Add('VM_Hardware_Ver', $_.HardwareVersion)
$obj.Add('Tools_Version', $_.ExtensionData.Config.Tools.ToolsVersion)
$obj.Add('Tools Status', (&{if($_.Guest.Extensiondata.GuestState -eq "notRunning"){
"Not running"
}
else{
$_.Guest.Extensiondata.ToolsVersionStatus.Replace("guestToolsNeedUpgrade","Out of date").Replace("guestToolsNotInstalled","Not installed").Replace("guestToolsCurrent","Current").Replace("guestToolsUnmanaged","Unmanaged")
}}))
$obj
}
}
$vmInfo
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
LucD,
I am getting blank output
You forgot to place the $obj variable in the pipeline.
I updated the code above.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Thank you LucD,
$obj worked for onscreen output but I was not able to export to csv as I was still getting blank
So I had to add as below to make it work for exporting to csv.
New-Object PSObject -Property $obj
Thank you very much