У меня проблема с функцией powershell,
функция должна взять массив объектов и разбить их на группы. затем помещает группы в массив
вот функция.
function getRebootGroups(){ #Recieves allBrokerMachines result object
$RebootGroups = @()
for ($i = 0; $i -lt $args[0].count; $i += $maxConcurrentReboots) {
$RebootGroups += ,@($args[0][$i..($i+($maxConcurrentReboots-1))]);
}
if ($RebootGroups.Length -eq 1){
}
Out-File -InputObject (ConvertTo-Json $RebootGroups) -FilePath C:\Citrix \getRebootGroups.txt
$numberOfGroups = $RebootGroups.Length
Write-Debug -Message "getRebootGroups: $numberOfGroups"
return $RebootGroups
}
вы можете видеть, что я экспортирую массив в файл json, чтобы я мог видеть, что происходит. внутри этой функции объекты хорошо вложены. я получаю $ rebootgroups [index] [группа машин], как и ожидалось.
однако, если есть только одна группа, вызывающая функция оценивает этот метод как getRebootGroups [группа машин], что является неожиданным.
если существует несколько групп, вызывающая функция оценивает этот метод как getRebootGroups [index] [группа машин], как и ожидалось.
его оболочка power power видит, что родительский объект пуст, и обрезает его
вот метод вызова.
function testGetRebootGroups(){ #calculate reboot groups and check group size.
$allMachines = allBrokerMachines $CTXProdCatalogs
$result = getRebootGroups $allMachines
$expectedNumGroups = ($allMachines.Length / $maxConcurrentReboots)
Out-File -InputObject (ConvertTo-Json $result) -FilePath C:\Citrix\testGetRebootGroups.txt
$result.Length
$numgroups = $result.Length
if($result.Length -eq $expectedNumGroups){
return "Pass - $numgroups groups created. (Group Size = $maxConcurrentReboots)"
}else{
return "Fail - $numgroups groups created. $expectedNumGroups groups expected."
}
}
Я не могу предоставить входные данные по соображениям безопасности, однако входные данные могут быть просто массивом типа ...
$inputData = @('PC1','PC2','PC3','PC4','PC5','PC6','PC7','PC8','PC9','PC10')
Я был бы очень признателен за любую помощь, которую кто-то может предложить