Как получить-AzPublicIpAddress на основе ResourceId? - PullRequest
0 голосов
/ 06 марта 2019

Сценарий развертывания должен перечислять существующие общедоступные IP-адреса из общедоступного IP-префикса. Публичный префикс IP-объекта содержит массив идентификаторов ресурсов отдельных общедоступных IP-адресов.

Я бы хотел получить отдельные публичные IP-адреса, используя предоставленный идентификатор ресурса. Примерно так:

Get-AzPublicIpAddress -ResourceId $resourceId;

К сожалению, такой подписи не существует. Get-AzPublicIpAddress ожидает, что в качестве входного параметра будет указано имя IP-адреса.

Я понимаю, что могу сделать:

  1. Вызвать Get-AzResource и получить необходимую информацию из возвращенного объекта [это означает дополнительный сетевой вызов]
  2. Разбор необходимой информации из идентификатора ресурса [хотел бы избежать реализации этой логики в PowerShell]

Вопрос - это единственные варианты? Или, возможно, Az предоставляет встроенный способ анализа идентификаторов ресурсов?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019
  1. Вы можете использовать Get-AzResource -resourceId xxx -ExpandProperties | fl * для таких запросов.это общий командлет, который будет работать для любого ресурса.

Как называется Get-AzResource дополнительный сетевой вызов по сравнению с Get-AzPublicIpAddress?Его 1 вызов против 1 вызова.

Нет, Az не предоставляет никаких возможностей синтаксического анализа, они не нужны.У вас есть инструменты для использования идентификатора ресурса, а также отдельных имен.

получить имя ресурса из идентификатора ресурса довольно просто:

$resourceId -split '/' | Select-Object -Last 1
0 голосов
/ 06 марта 2019

Я не думаю, что вы можете передать -ResourceId непосредственно в команду, все встроенные параметры здесь: https://docs.microsoft.com/en-us/powershell/module/az.network/get-azpublicipaddress?view=azps-1.4.0. Самый близкий путь, который я могу найти, это ваш вариант 2.

Не уверен, почему вы хотите использовать Get-AzPublicIpAddress через ResourceId, даже если мы используем -Name и -ResourceGroupName, то есть Get-AzPublicIpAddress -Name <publicIpName> -ResourceGroupName <ResourceGroupName>, он, по сути, также передает их в URL запроса rest api которую команда назвала .

GET https://management.azure.com/subscriptions/xxxxxxxxx/resourceGroups/joywebapp/providers/Microsoft.Network/publicIPAddresses/joyVM-ip?api-version=2018-10-01

На самом деле, вы можете найти /subscriptions/xxxxxxxxx/resourceGroups/joywebapp/providers/Microsoft.Network/publicIPAddresses/joyVM-ip это ResourceId.

Так что я думаю, что для Microsoft не должно быть слишком сложным добавить -ResourceId в качестве встроенного параметра команды Get-AzPublicIpAddress, если вы хотите улучшить его, вы можете оставить отзыв здесь .

Обновление

Microsoft ответила на эту проблему, см .: https://github.com/Azure/azure-powershell/issues/8704#issuecomment-470604852

спасибо, что открыли этот запрос функции - чтобы лучше понять, почему проблемы, о которых вы упоминали, были закрыты: все новые командлеты, которые мы отправляем в Az, должны соответствовать шаблону наличия наборов параметров, которые позволяют пользователю выполнять следующее:

Укажите компоненты ресурса (например, имя группы ресурсов, имя ресурса и т. Д.) Укажите идентификатор ресурса ресурса Укажите объектное представление ресурса (некоторые командлеты не будут использовать это, например, Get - *)

Позже в этом году мы начнем генерировать наши командлеты с использованием AutoRest ( см. Этот пост в блоге для получения более подробной информации ), и вышеуказанные шаблоны будут применены в генераторе. Наша цель - создать командлеты для существующих служб Azure и заменить существующие командлеты на созданные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...