VMware Cloud Community
ganapa2000
Hot Shot
Hot Shot
Jump to solution

Unexpected token 'else' in expression or statement.

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

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Try changing the code to

$vCenters = @(

"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

View solution in original post

Reply
0 Kudos
4 Replies
LucD
Leadership
Leadership
Jump to solution

Try changing the code to

$vCenters = @(

"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

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

LucD,

I am getting blank output

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

You forgot to place the $obj variable in the pipeline.
I updated the code above.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
ganapa2000
Hot Shot
Hot Shot
Jump to solution

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 Smiley Happy

Reply
0 Kudos