VMware Cloud Community
RahmanK
Contributor
Contributor

PowerCLI error when creating new resource pools

I' am currently writing a script which loops through a group of hosts and creates new resource pool on the host with the least resource pool count.

However I receive the error below when the script is attempting to create a new resource pool on the target host.

======================================================================================================================

ERROR

New-ResourcePool : Cannot bind parameter 'Location'. Cannot convert the "" value of type "System.Management.Automation.P

SCustomObject" to type "VMware.VimAutomation.ViCore.Types.V1.Inventory.VIContainer".

At C:\Scripts\Dev\devHashBuildEnvironment.ps1:51 char:66

+            $pool_list = $pool_list + (New-ResourcePool -Location <<<<  $tgtVmHost -Name $pool_name -Confirm:$false)

    + CategoryInfo          : InvalidArgument: (:) [New-ResourcePool], ParameterBindingException

    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,VMware.VimAutomation.ViCore.Cmdlets.Commands.NewResourcePool

======================================================================================================================

======================================================================================================================

SCRIPT

Param($folder_param, $envID_param, $network_param, $instructor_param, $region_param)

If (!$folder_param -or !$envID_param -or !$network_param -or !$instructor_param -or !$region_param)

{

    "usage: BuildPools-Sandbox.ps1 -f folder -e envIdArray -n network -i instructor -r region"

    Exit

}

$location = Get-Folder -Location "Production" -Name $folder_param

$vmhost_list = Get-VMHost -Location $location | Where {$_.Name -ne 'Resources'} | Sort

If (!$location -or !$vmhost_list) { Exit }

$pool_list = @()

$i = 0

$numberOfPools = $envID_param.count

$hosts = @{}

1..$numberOfPools | %{

  Foreach ($vmhost in $vmhost_list){

  $hostPools = Get-ResourcePool -Location $vmhost

  $noOfPools = $hostPools.count

  $hosts = $hosts + @{$vmhost = $noOfPools}

  }

  $tgtVmHost = $hosts.GetEnumerator() | Sort Value | Select -First 1 | Select Name

          $pool_name = "Env" + $envID_param[$i++] + "_" + $network_param + "_Net" + ($j+1) + "_" + $instructor_param + "_" + $region_param

            $pool_list = $pool_list + (New-ResourcePool -Location $tgtVmHost -Name $pool_name -Confirm:$false)

        

            "  Creating:  " + $pool_name + " on " + $tgtVmHost.Name

  $hosts.clear()

  }

======================================================================================================================


If i run echo $tgtVmHost the output shows the correct host.


Name

===============

hostA.domain.com

Reply
0 Kudos
2 Replies
LucD
Leadership
Leadership

Change the line to the following.

That way you only have the name as a [string], and OBN should be able to resolve the Location

$tgtVmHost = $hosts.GetEnumerator() | Sort Value | Select -First 1 | Select -ExpandProperty Name


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

RahmanK
Contributor
Contributor

Thanks that did the trick.

Reply
0 Kudos