powershell:更新哈希表中的字符串



我有一个自定义对象的集合,需要为每个对象执行以下步骤:

  1. 用" Team2 Group"替换" Team1 Group"
  2. 将结果更新保存到哈希表,我将传递给API

对象看起来像这样:

id             : 1
groupId        : 1
name           : Customer1 Dashboard
fullName       : Customer Dashboards/Team2 Group/Customer1 Group/Customer1 Dashboard
groupName      : Customer1 Group
groupFullPath  : Customer Dashboards/Team2 Group/Customer1 Group
widgetTokens   : { @{type = owned; name = defaultResourceGroup; value = Client Teams/Team1 Group/Customers/Customer1*; inheritList = System.Object[] }, @{type = owned; name = defaultWebsiteGroup; value = Client Teams/Team1 Group/Customers/Customer1; inheritList = System.Object[]}}

这是我到目前为止所拥有的:

Foreach ($dashboard in $allDashboards) {
    $dashboardProperties = @{ }
    $dashboard.psobject.properties | ForEach-Object {         $dashboardProperties[$_.Name] = $_.Value }
@($dashboardProperties.GetEnumerator()) | Where-Object { $_.Name -eq 'widgetTokens' } | Select-Object -ExpandProperty Value | Where-Object { $_.Value -match "Team1 Group" } | ForEach-Object { $dashboardProperties[$_.Key] = @($_.value.replace('Team1 Group', 'Team2 Group')) }
$dashboardProperties
#Code to interact with an API

}

因为有两个项目匹配"@($ dashboardProperties.getEnumerator(((| whe -object {$_。Names-eq'widgetTokens'} ..." line(至少,我认为这就是原因(,我收到以下错误:

Index operation failed; the array index evaluated to null.
At line:1 char:200
+ ... ch-Object { $dashboardProperties[$_.Key] = @($_.value.replace('Team1 ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArrayIndex
    Index operation failed; the array index evaluated to null.
    At line:1 char:200
    + ... ch-Object { $dashboardProperties[$_.Key] = @($_.value.replace('Team1 ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArrayIndex

当我运行此操作时,我会看到两行,正如预期的:

@($dashboardProperties.GetEnumerator()) | Where-Object { $_.Name -eq 'widgetTokens' } | Select-Object -ExpandProperty Value | Where-Object { $_.Value -match "Team1 Group" }

我不确定如何超越这个想法?

谢谢

基于Reddit的反馈,看起来应该有效:

$DashboardProperties.WidgetTokens |
Where-Object { $_['Name'] -eq 'widgetTokens' -and $_['Value'] -match 'Team1 Group' } |
ForEach-Object { $_['Value'] = $_['Value'] -replace '1','2' }

最新更新