Получение ошибки при динамическом присвоении массива ключу в хэше - PullRequest
0 голосов
/ 21 мая 2019

У меня есть сторонняя функция, которая создает профиль для сервера. Когда я создаю массив и присваиваю хешу, который требуется сторонней функции, он работает нормально, но когда я динамически создаю массив и присваиваю его, я получаю ошибку.

Попытался работать с простой переменной, которая имеет все значения и создала и массив этих значений также статически. Но когда я динамически создаю, это терпит неудачу.

Function New-Disk
{
    Param (
        [parameter(Mandatory = $false)]
        [Array] $XXX_drivedata
    )
    if ($XXX_drivedata[3] -ieq "yes")
    {
        $boot_data = $TRUE;
    }
    else
    {
        $boot_data = $FALSE;
    }
    if ($XXX_drivedata[9] -ieq "yes")
    {
        $erase_data = $TRUE;
    }
    else
    {
        $erase_data = $FALSE;
    }
    $params1 = @{
        name = $XXX_drivedata[0];
        RAID = $XXX_drivedata[1];
        numberofDrives = $XXX_drivedata[2];
        driveType = $XXX_drivedata[5];
        driveSelectionBy = $XXX_drivedata[6];
        minDriveSize = $XXX_drivedata[7];
        maxDriveSize = $XXX_drivedata[8];
        eraseDataOnDelete = $erase_data;
        bootable = $boot_data;
        accelerator = $XXX_drivedata[4];
        storageLocation = $XXX_drivedata[10]
    }


$params = $params1.Clone()
    foreach($item in $params1.GetEnumerator())
    {
        #if ([string]::IsNullOrWhiteSpace($item.Value) -or ($item.Value -ieq "null"))
        if (!$item.value)
        {
            $params.Remove($item.Key)
        }
    }
    try {
        $logical_disk_create = New-<Function for disk> @params
        if ($logical_disk_create)
        {
            $XXX_disk_create_status = "pass"
            return $SCID_disk_create_status,$logical_disk_create.SasLogicalJBOD
        }
    }
    catch {
        Write-Error $_
        $XXX_disk_create_status = "fail"
        return $XXX_disk_create_status,$logical_disk_create
        continue
    }
}

#------------------------------------------------
#Attach local disk and JBOD to controller
#------------------------------------------------

Function New-Controller
{
    Param (
        [parameter(Mandatory = $true)]
        [Array] $SCID_controller_detail,

        [parameter(Mandatory = $true)]
        [Array] $SCID_logicaldisk_detail
    )
    if ($SCID_controller_detail[1] -ieq "yes")
    {
        $initialize_data = $TRUE;
    }
    else
    {
        $initialize_data = $FALSE;
    }
    $params1 = @{controllerID = $XXX_controller_detail[0];initialize = $initialize_data;writeCache = $XXX_controller_detail[2];logicalDisk = $XXX_logicaldisk_detail}

    $params = $params1.Clone()
    foreach($item in $params1.GetEnumerator())
    {
        if ($item.key -ne "logicalDisk")
        {
            #if ([string]::IsNullOrWhiteSpace($item.Value))
            if (!$item.value)
            {
                $params.Remove($item.Key)
            }
        }
    }
    try {

        $logicaldisk_controller_create = New-<Function for disk controller> @params
        if ($logicaldisk_controller_create)
        {
            $SCID_disk_create_status = "pass"
            return $SCID_disk_create_status,$logicaldisk_controller_create
        }
    }
    catch {
        Write-Error $_
        $SCID_disk_create_status = "fail"
        return $SCID_disk_create_status,$logicaldisk_controller_create
        continue
    }
}

#--------------------------------------------------
#Create Server Profile
#--------------------------------------------------

Function New-ServerProfile
{

        .......

    #------------------------------------------------------
    #Read local disk and JBOD details
    #------------------------------------------------------

    $SP_logical_disk_list = @()
    $SP_logical_disk_list_controller = @()
    $XXX_controllerdata = @("$($serverprofile.localStorages.integratedStorageController.controllerID)", "$($serverprofile.localStorages.integratedStorageController.reinitialize)", "$($serverprofile.localStorages.integratedStorageController.writeCache)")

    if ($serverprofile.localStorages.integratedStorageController.logicalDrive)
    {
        foreach ($logicaldrive in $($serverprofile.localStorages.integratedStorageController.logicalDrive))
        {
            $XXX_drivedata = @("$($logicaldrive.name)", "$($logicaldrive.raidLevel)", "$($logicaldrive.physicalDrives)", "$($logicaldrive.boot)", "$($logicaldrive.accelarator)", "$($logicaldrive.driveTechnology)")
            $logicaldisk_create = New-Disk -XXX_drivedata $XXX_drivedata
            if ($logicaldisk_create[0] -ne "fail")
            {
                $SP_logical_disk_list += $logicaldisk_create[1]
                $XXX_drivedata.Clear()
            }
        }
        $logdisk_controller = New-Controller -XXX_controller_detail $SCID_controllerdata -XXX_logicaldisk_detail $SP_logical_disk_list
        if ($logdisk_controller[0] -ne "fail")
        {
            $SP_logical_disk_list_controller += $logdisk_controller[1]
        }
    }

...........................

$LogicalDisk = New-<Fuctionfordisk> -Name "MyDisk" | New-<Function for disk controller> -Initialize
    $LogicalDisks = New-<Fuctionfordisk> -Name "MyDisk" | New-<Function for disk controller> -Initialize
    $logcaldr = @($LogicalDisk, $LogicalDisks)

$params1 = @{
        ....................
                other parameters

        logicalDisk = $SP_logical_disk_list_controller
    }
    $params = $params1.Clone()
    foreach($item in $params1.GetEnumerator())
    {
        if ($item.key -ne "LogicalDisk|localStorage")
        {
            #if ([string]::IsNullOrWhiteSpace($item.Value) -or ($item.Value -ieq "null"))
            if (!$item.value)
            {
                $params.Remove($item.Key)
            }
        }
    }
    $task = New-<Server Profile> @params | Wait-<task>

Когда я использую localdr, он работает нормально, но когда я использую $SP_logical_disk_list_controller для хранения, я получаю ошибку

JSON, отправленный в запросе, содержал неизвестный тип, для которого в строке 1 рядом со столбцом 746 требовался другой неизвестный тип. Исправьте содержимое JSON и повторите запрос.

Я даже пытался использовать $logdisk_controller[1], но все равно появляется та же ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...