【问题标题】:Set-AzureRmResourceGroup : 'resourceGroupName' does not match expected pattern '^[-\w\._\(\)]+$'Set-AzureRmResourceGroup:“resourceGroupName”与预期模式“^[-\w\._\(\)]+$”不匹配
【发布时间】:2021-01-15 05:04:24
【问题描述】:

在下面运行它,似乎无法正确地将集合传递到 ForEach 循环中,即使它返回了我想要的名称。 $RGInfo 按预期返回。但是当我将它传递到 Set-AzureRmResourceGroup 的循环中时,它会出现如下错误

PS H:\> $rginfo

ResourceGroupName   
-----------------   
rg-crp-d365-bp-n    
rg-crp-d365-dev1-n  
rg-crp-d365-dev2-n  
rg-crp-d365-upgrad-n

$RGInfo = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "RG-CRP-D365*" } | Select-Object ResourceGroupName

ForEach ($RGName in $RGInfo) {
    If ($RGName.Tags -eq $null) { 
        Set-AzureRmResourceGroup -ResourceGroupName $RGName -Tag @{BUSINESS_UNIT="CRP"; COST_CENTER="6435" }       
    }
}

知道为什么我不断收到以下信息吗?有四个 RG,所以 ForEach 循环是有效的。

Set-AzureRmResourceGroup:“resourceGroupName”与预期不匹配 模式'^[-\w._()]+$'。在行:7 字符:2 + 设置-AzureRmResourceGroup -ResourceGroupName $RGName -Tag @{BUSINESS_ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResourceGroup], ValidationException + FullyQualifiedErrorId:Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetA
zureResourceGroupCmdlet Set-AzureRmResourceGroup : “resourceGroupName”与预期的模式“^[-\w._()]+$”不匹配。 在行:7 字符:2 + 设置-AzureRmResourceGroup -ResourceGroupName $RGName -Tag @{BUSINESS_ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResourceGroup], ValidationException + FullyQualifiedErrorId:Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetA
zureResourceGroupCmdlet Set-AzureRmResourceGroup : “resourceGroupName”与预期的模式“^[-\w._()]+$”不匹配。 在行:7 字符:2 + 设置-AzureRmResourceGroup -ResourceGroupName $RGName -Tag @{BUSINESS_ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResourceGroup], ValidationException + FullyQualifiedErrorId:Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetA
zureResourceGroupCmdlet Set-AzureRmResourceGroup : “resourceGroupName”与预期的模式“^[-\w._()]+$”不匹配。 在行:7 字符:2 + 设置-AzureRmResourceGroup -ResourceGroupName $RGName -Tag @{BUSINESS_ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Set-AzureRmResourceGroup], ValidationException + FullyQualifiedErrorId:Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetA
zureResourceGroupCmdlet

【问题讨论】:

  • If ($RGName.Tags -eq $null) - 这个检查没有意义,因为你没有传递标签,所以它总是正确的。至于错误我不知道,请尝试调试。或执行以下操作:$rgname 就在 set-azurermresourcegroup 之前

标签: azure azure-powershell


【解决方案1】:

首先您将 $RGInfo 的内容过滤为仅资源组名称,您不能将标签添加到名称中

$RGInfo = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "RG-CRP-D365*" } | Select-Object ResourceGroupName

下面的语法应该可以工作。

$RGInfo = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "RG-CRP-D365*" }

ForEach ($RGName in $RGInfo)
{
    If ($RGName.Tags -eq $null)
{ 
Set-AzureRmResourceGroup -ResourceGroupName $RGName.ResourceGroupName -Tag @{BUSINESS_UNIT="CRP"; COST_CENTER="6435" }       
    }
}

希望这会有所帮助。

【讨论】:

  • 准确!我知道我错过了这个系列的一小部分,我完全忽略了那个关键部分。非常感谢你,汉内尔
【解决方案2】:

从 CSV 文件导入列表时,我遇到了类似的问题。结果 RG 名称上有空格?‍♂️。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多