powershell - 将数组动态分配给哈希中的键时出错
问题描述
我有一个为服务器创建配置文件的第三方功能。当我创建一个数组并分配给第三方函数所需的哈希时,它工作正常,但是当我动态创建一个数组并分配它时,我得到了错误。
尝试使用具有所有值的简单变量,并静态地创建和排列这些值。但是当我动态创建它时会失败。
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]
但仍然出现同样的错误。
解决方案
推荐阅读
- c++ - 如何正确重载 printf 以打印 C++ 类中的值
- unix - execve() 中的 Envp 无效
- solr - 无法执行 hybris SOLR 索引
- c++ - Windows IO 完成端口是否将类用作完成键?
- javascript - 在打字稿中优先考虑函数
- c++ - Arduino上的AES128加密
- python - 如何根据 Python 中的部分字符串删除重复行
- testing - 如何将 wei/eth 发送到合约地址?(使用 truffle javascript 测试)
- python - 嵌套列表 - 创建以索引为项目的新嵌套列表
- jasper-reports - Jaspersoft studio json 数据适配器书或子报告文档为空