PowerShell 7处理JIRA Insight API缺失字段的哈希表赋值问题
解决JIRA Insight API动态缺失字段的PowerShell解析问题
核心思路
将每个资产对象的attributes集合转换为以objectTypeAttributeId为键的哈希表,通过键直接安全取值,缺失字段自动返回空字符串,避免静态赋值时的索引错误和字段缺失问题。
改进后的代码实现
# 定义objectTypeAttributeId与SQL表字段的映射关系,便于维护 $attributeMapping = @{ '120' = 'Key' '121' = 'Name' '122' = 'Created' '123' = 'Updated' '124' = 'AssetTag' '125' = 'Status' '127' = 'SerialNumber' '128' = 'Description' '214' = 'Location' '215' = 'CostCenter' '443' = 'AssociatedPerson' '444' = 'AdminWorkgroup' '424' = 'Model' } $TradePhones = @() foreach($item in $TradingPhones.objectEntries) { # 将当前资产的属性转换为键值对哈希表,便于快速查找 $attrLookup = @{} foreach($attr in $item.attributes) { # 单值属性取第一个displayValue;多值可改为 -join ';' 合并 $attrLookup[$attr.objectTypeAttributeId.ToString()] = $attr.objectAttributeValues.displayValue[0] } # 构建有序哈希表,按映射关系赋值,缺失字段返回空字符串 $assetObject = [ordered]@{} foreach($attrId in $attributeMapping.Keys) { $fieldName = $attributeMapping[$attrId] # 空值合并运算符:存在则取对应值,否则返回空字符串 $assetObject[$fieldName] = $attrLookup[$attrId] ?? '' } $TradePhones += [PSCustomObject]$assetObject }
关键细节说明
- 属性映射表:集中管理
objectTypeAttributeId和目标字段的对应关系,后续新增/修改字段只需调整此表,无需改动循环逻辑。 - 哈希表转换:把分散的
attributes集合转为键值对,解决了静态索引依赖字段顺序的问题,查找效率更高。 - 安全取值:使用PowerShell 7支持的
??空值合并运算符,确保缺失字段自动填充空字符串,避免赋值错误。 - 多值处理:如果属性存在多值(
objectAttributeValues是数组),可将赋值逻辑改为$attr.objectAttributeValues.displayValue -join ';',把多值合并为单个字符串适配SQL表结构。
后续SQL插入
处理后的$TradePhones是标准的PSCustomObject集合,可直接使用Write-SqlTableData(需安装SqlServer模块)或ADO.NET方式插入SQL表:
# 示例:使用Write-SqlTableData插入SQL表 Write-SqlTableData -ServerInstance "YourSQLServer" -DatabaseName "YourDB" -SchemaName "dbo" -TableName "YourAssetTable" -InputData $TradePhones
内容的提问来源于stack exchange,提问作者sdcrytek
相关产品推荐
相关产品推荐

