1

Я пытаюсь выполнить очень простой командлет, но он не работаетПочему ForEach-Object не работает AzureRM командлета

$resources = Get-AzureRMResourceGroup | % { Get-AzureRMResource -ResourceGroupName $_.ResourceGroupName} 

$resources 

Сообщение об ошибке броска заключается в следующем

Get-AzureRmResource: набор параметров не может быть разрешен с использованием заданных именованных параметров
. По строке: 1 char: 45
+ ... Группа | % {Get-AzureRMResource -ResourceGroupName $ _. ResourceGroupNa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: InvalidArgument: (:) [Get-AzureRmResource], Para meterBindingException
+ FullyQualifiedErrorId: AmbiguousParameterSet, Microsoft .Azure.Commands.R
esourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

ответ

1

-ResourceGroupName является частью набора параметров, что означает, что при использовании он должен быть включен вместе с другими обязательными параметрами, которые принадлежат к его набору.

В документации here показаны два набора параметров с этим параметром.

#Parameter Set: Get resource by name and group 
Get-AzureRmResource [-ApiVersion <System.String> ] [-ExpandProperties] [-ExtensionResourceName <System.String> ] [-ExtensionResourceType <System.String> ] [-IsCollection] [-ODataQuery <System.String> ] [-Pre] [-ResourceGroupName <System.String> ] [-ResourceName <System.String> ] [ <CommonParameters>] 

#Parameter Set: Get resource by name, group and type 
Get-AzureRmResource -ResourceGroupName <System.String> -ResourceName <System.String> -ResourceType <System.String> [-ApiVersion <System.String> ] [-ExpandProperties] [-ExtensionResourceName <System.String> ] [-ExtensionResourceType <System.String> ] [-ODataQuery <System.String> ] [-Pre] [ <CommonParameters>] 

На основании параметров, используемых в вашем скрипте, он не может определить, какой набор использовать.

Либо добавьте больше параметров в свою команду, чтобы сузить набор, который нужно использовать.

Пример 1: Получить ресурс

Эта команда получает ресурс из microsoft.web/сайтов типа, названный ContosoWebsite под ResourceGroup11.

Windows PowerShell

PS C:\> Get-AzureRmResource -ResourceType "microsoft.web/sites" -ResourceGroupName "ResourceGroup11" -ResourceName "ContosoWebsite" 

ИЛИ

использовать набор, который принимает параметры, где область является более узкой

Например:

Get-AzureRmResourceGroup возвращает объект, как это

PS C:\> Get-AzureRmResourceGroup 

ResourceGroupName : xxxxxxxxxxxxxxxxx 
Location   : xxxxxxxxxxxx 
ProvisioningState : Succeeded 
Tags    : 
ResourceId  : /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/xxxxxxxxxxxxxxxxxxx 

Вы можете попробовать передать ResourceId следующему командлету.

#Parameter Set: Get a single resource by its Id. 
Get-AzureRmResource -ResourceId <String> [-ApiVersion <System.String> ] [-ExpandProperties] [-ODataQuery <System.String> ] [-Pre] [ <CommonParameters>] 

Вы команда будет выглядеть следующим образом:

$resources = Get-AzureRMResourceGroup | % { Get-AzureRMResource -ResourceId $_.ResourceId} 

$resources 
+0

$ ресурсы = Get-AzureRMResourceGroup | Get-AzureRMResource это не требует ввода конвейера. Поскольку, как только вы его запускаете, он выдает ошибки для каждой отдельной группы ресурсов, а затем Get-AzureRMResource просто перечисляет все ресурсы, как это было бы самостоятельно.На мой взгляд, это ошибка в этом командлете. – Mitul

+0

Я сказал * ЕСЛИ * он берет трубчатый вход. проверьте документацию, а свойства в наборе действительно берут входные данные по каналу по свойству. – Nkosi

+0

Моя проблема заключается в том, что командлет foreach должен работать, даже если командлет не принимает объект конвейера. В примере примера справки 'help get-azureRMresource' вы можете перечислить все ресурсы с помощью' Get-AzureRMResource -ResourceGroupName ContosoRG01' и они не предоставляют никакого имени или чего-либо еще. Который говорит мне, что документация здесь не так. – Mitul