Powershell: обновление строки в хеш-таблице - PullRequest
0 голосов
/ 22 мая 2019

У меня есть коллекция пользовательских объектов, и мне нужно выполнить следующие шаги для каждого объекта:

  1. Заменить "Team1 Group" на "Team2 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 ()) | Where-Object {$ _. Name -eq 'widgetTokens'} ..." (впо крайней мере, я думаю именно поэтому), я получаю следующую ошибку:

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" }

Я не уверенкак пройти мимо этого, есть мысли?

Спасибо

1 Ответ

0 голосов
/ 23 мая 2019

Судя по отзывам от Reddit, похоже, что это должно работать:

$DashboardProperties.WidgetTokens |
Where-Object { $_['Name'] -eq 'widgetTokens' -and $_['Value'] -match 'Team1 Group' } |
ForEach-Object { $_['Value'] = $_['Value'] -replace '1','2' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...