PowerCLI-Example-Scripts
PowerCLI-Example-Scripts copied to clipboard
New-HVPool: Errors when source JSON file has null values for maxNumberOfMonitors and maxResolutionOfAnyOneMonitor
Scenario: Exporting pool settings from a desktop pool in one pod, for use in creating a replica pool in another pod.
Source pool is Automated, Instant Clone, Blast protocol only. No PCoIP.
Exported JSON file has the following:
"PcoipDisplaySettings": {
"Renderer3D": "MANAGE_BY_VSPHERE_CLIENT",
"EnableGRIDvGPUs": false,
"VGPUGridProfile": null,
"VRamSizeMB": null,
"VRamSizeKB": null,
"MaxNumberOfMonitors": null,
"MaxResolutionOfAnyOneMonitor": null
}
Using New-HVPool with the JSON file as input for the -spec option, I get the following:
The variable cannot be validated because the value 0 is not a valid value for the maxNumberOfMonitors variable.
At C:\Users\chriskoch99\Documents\WindowsPowerShell\Modules\VMware.Hv.Helper\VMware.HV.Helper.psm1:4536 char:17
+ ... $maxNumberOfMonitors = $jsonObject.DesktopSettings.displa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ValidationMetadataException
+ FullyQualifiedErrorId : ValidateSetFailure
The variable cannot be validated because the value is not a valid value for the maxResolutionOfAnyOneMonitor variable.
At C:\Users\chriskoch99\Documents\WindowsPowerShell\Modules\VMware.Hv.Helper\VMware.HV.Helper.psm1:4537 char:17
+ ... $maxResolutionOfAnyOneMonitor = $jsonObject.DesktopSettin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ValidationMetadataException
+ FullyQualifiedErrorId : ValidateSetFailure
This is because null values are not included in the ValidateSet for the $maxNumberOfMonitors and $maxResolutionOfAnyOneMonitor variables as defined at the beginning of the script, and the if ($null -ne $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings) section doesn't code around the possibility of null values for Blast-only pools.
To resolve this, I have modified the following:
$maxNumberOfMonitors = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxNumberOfMonitors
$maxResolutionOfAnyOneMonitor = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxResolutionOfAnyOneMonitor
to the following:
If ($jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxNumberOfMonitors) {
$maxNumberOfMonitors = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxNumberOfMonitors
}
If ($jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxResolutionOfAnyOneMonitor) {
$maxResolutionOfAnyOneMonitor = $jsonObject.DesktopSettings.displayProtocolSettings.pcoipDisplaySettings.maxResolutionOfAnyOneMonitor
}
This seems to work. For Blast only pools, the values of these settings when you export them will generally be null, and the function should allow for this.
Thoughts?
Hey Chris, I have the same error, but with the MaxResolutionOfAnyOneMonitor setting as well. My question is, where exactly did you put in your fix? In the json or in the ps1?
This was a direct edit to the New-HVPool function in VMware.HV.Helper.psm1. See my last two code blocks above for the specific change. Should be able to search for the original lines in VMware.HV.Helper.psm1 to find the spot.
Thanks! I'll give that a try.