通配符(正则表达式)作为参数:ResourceGroupName与预期模式不匹配

时间:2016-10-24 00:12:54

标签: azure azure-powershell

我正在尝试搜索名称中包含" XYZ"的ResourceGroup。并根据其存在来处理Try {} Catch {}。我确信它应该很简单,但我无法理解它为什么不这样:

Get-AzureRmResourceGroup -Name "[MK3]" #No error as it exists
Get-AzureRmResourceGroup -Name "[BLAH]" #Errors as it doesn't exist

返回的错误是:

Get-AzureRMResourceGroup : 'resourceGroupName' does not match expected pattern '^[-\w\._\(\)]+$'.
At line:1 char:1
+ Get-AzureRMResourceGroup -Name [MK3]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-AzureRmResourceGroup], ValidationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResourceGroupCmdlet

这有效:

Get-AzureRmResourceGroup | Where-Object{$_.ResourceGroupName -like "*MK3*"}

但是这种方法需要更多,如果'我更愿意避免的陈述。

对我来说,错误建议cmdlet处理通配符,但我似乎无法正确使用语法。

任何建议,非常感谢。

2 个答案:

答案 0 :(得分:1)

命令“Get-AzureRmResourceGroup -Name”应指定要获取的资源组的名称,但不允许使用通配符。

但我们可以使用函数列出资源名称:

PS C:\windows\system32> function test () {param ($name ) ;Get-AzureRmResourceGroup | Where-Object{$_.ResourceGroupName -like "$name"} }

因此我们可以使用test -name“test *”代替Get-AzureRmResourceGroup: enter image description here 有关Get-AzureRmResourceGroup的更多信息,请参阅以下链接: https://msdn.microsoft.com/en-us/library/mt759838.aspx

如果您仍有疑问,欢迎回复此处。谢谢。
最诚挚的问候,

答案 1 :(得分:0)

谢谢@Jason Ye。使用你的指导,我想出了这个小功能:

Function Find-ResourceGroupName
{
    Param
    (
        [Parameter(Position=0)]
        [string]$SearchTerm
    )

    $ResourceGroupName = (Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -Match "\b$SearchTerm"}).ResourceGroupName
    If($ResourceGroupName)
    {
        Return $ResourceGroupName
    }
    else
    {
        Throw "Resource group matching search term not found ($SearchTerm)."
    }
}

Try
{
    Find-ResourceGroupName "mk3"
}
Catch
{
   Write-Error $Error[0]
}

可能比if语句更复杂,我确信有更好的方法,但它在我的脚本中运行良好。

UPDATE1:

在上面擦洗。使用Find-AzureRMResource为我完成工作,它是内置的。例如:

Find-AzureRmResource -ResourceGroupNameContains $ProjectCode | Where-Object {$_.ResourceType -like "*$ResourceType"}

$ ProjectCode只是在我们的资源组名称中找到的5个字符的引用。