Powershell: удалить элемент с объекта - PullRequest
2 голосов
/ 26 января 2020

Я пытаюсь создать новый Azure файл развертывания ARM со сценарием на основе существующего шаблона ARM.

В основном я делаю следующее:

  1. Экспорт файла JSON для виртуальной машины
  2. Преобразование файла JSON в объект в PShell
  3. Внести изменения
  4. Создать новый JSON файл

Проблема, с которой я столкнулся сейчас, заключается в том, что в исходном файле JSON включена функция storageprofile.imagereference, которая необходимо удалить из нового файла JSON.

Я пытался установить его значение (storageprofile.imagereference.id = $ null), но ARM это не нравится и хочет удалить всю запись storageprofile.imagereference.

Итак, в моем Pshell мой VMObjectFile читается как:

$VMObjectFile = (Get-Content $ImportFile | Out-String | ConvertFrom-Json)

И свойство, которое я хочу удалить, установлено на:

$VMObjectFile.resources.properties.storageProfile.imageProfile

Но как мне это сделать? удалить все дерево? Я уже избавился от значения «id» и после этого могу установить $VMObjectFile.resources.properties.storageProfile.imageProfile в $null (удаление атрибута id),

Но как мне полностью удалить ссылку на изображение из поддерева $VMObjectFile.resources.properties.storageProfile, как там? несколько записей, которые все еще существуют по этому пути:

$VMObjectFile.resources.properties.storageProfile.osDisk
$VMObjectFile.resources.properties.storageProfile.dataDisk

1 Ответ

2 голосов
/ 26 января 2020

Удаление свойств из объекта PowerShell не так очевидно, как можно подумать:

$data = '{"a":{"b":{"c":"something","d":"another thing"}}}' | ConvertFrom-Json

$data.a.b.PSObject.Properties.Remove("c")

$data | ConvertTo-Json -Compress

Результат:

{"a":{"b":{"d":"another thing"}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...