为什么ForEach-Object不适用于AzureRM cmdlet

时间:2016-11-06 15:58:36

标签: powershell azure azure-resource-manager azure-resource-group

我正在尝试执行一个非常简单的cmdlet,但它不起作用

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

$resources

抛出的错误消息如下

  

Get-AzureRmResource:使用
无法解析参数集   指定的命名参数。在线:1字符:45
  + ...组| %{Get-AzureRMResource -ResourceGroupName $ _。ResourceGroupNa ...
  + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
      + CategoryInfo:InvalidArgument:(:) [Get-AzureRmResource],Para meterBindingException
      + FullyQualifiedErrorId:AmbiguousParameterSet,Microsoft.Azure.Commands.R
  esourceManager.Cmdlets.Implementation.GetAzureResourceCmdlet

1 个答案:

答案 0 :(得分: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 / sites类型的资源   ResourceGroup11下的ContosoWebsite。

     

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传递给下一个cmdlet。

#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