'Field Returns a False or True -- not details

After connecting to vSphere 6.7 from a win10 machine I run the following PowerShell command: Expecting the CSV output to include the details of Name, OperatingSystems (windows or linux), VMhost/IP, PowerState and the datastore. However, in the field "Operating Systems" I get the value FALSE -or- TRUE. Still relatively new to PowerShell so I don't see my request asking for a false/true. How do I correct this? So I can change the commands from: OSWindows -to- OSLinux? Thanks

 Get-VM | Select-Object Name, 
                           @{Name = 'Operatingsystem'; Expression = {$_.Guest -match 'OsWindows'}},
                           VMHost, PowerState,
                           @{Name = 'Datastore'; Expression = {$_ | Get-Datastore}} |
             Export-CSV -Path 'C:\users\username\documents\VMReport.csv' -NoTypeInformation 


Solution 1:[1]

$_.Guest -match 'OsWindows' will return a boolean ($true or $false).

If you want $false to result in the string Linux and $true to result in the string Windows, you can use the following trick:

@{...; Expression = {@('Linux','Windows')[($_.Guest -match 'OsWindows')]}}

PowerShell will evaluate $_.Guest -match 'OsWindows' - passing the resulting value to an array indexer @()[...] then forces PowerShell to convert it to a numerical value - and since it converts $false to 0 and $true to 1, they end up resolving one of the two array items.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mathias R. Jessen