使用PowerShell列出包含标记名和标记值的所有azure资源

时间:2017-05-19 22:21:20

标签: powershell azure azure-powershell

我正在尝试获取所有Azure VirtualMachines和Azure SqlDatabases的OperatingHours标记详细信息。 以下是资源中appID的可能性以及我需要在输出中相应打印的值:

  1. 如果任何资源中没有OperatingHours标签本身,则显示"标签不存在"
  2. 如果OperatingHours标签存在但包含null或空字符串,则显示" NULL / EMPTY"
  3. 如果OperatingHours标记与任何其他值一起出现,则显示该值。
  4. 我是否需要单独处理选项(2),或者是打印操作时的任何正常值。

    经过长时间的努力,我创建了以下脚本:

    $ErrorOccured = $false
    $resources = Get-AzureRmResource | 
                 Where-Object {($_.ResourceType -eq "Microsoft.Compute/virtualMachines") -or ($_.ResourceType -eq "Microsoft.Sql/servers/databases")} |
     foreach {
       new-object psobject -Property @{
            ResourceName = $_.ResourceName;
            ResourceType = $_.ResourceType;
            OperatingHours= try { 
                             $ErrorActionPreference = 'SilentlyContinue'; 
                             ($_ | select -expand Tags).OperatingHours;     }
                           catch { 
                             $ErrorOccured = $true ;                }
                           if ($ErrorOccured) 
                             {  "Tag not present"  } 
                           else { 
                             ($_ | select -expand Tags).OperatingHours;
                             $ErrorOccured = $false };}
             }
    $resources | Format-Table 
    

    运行此脚本时,我收到以下错误:

    At line:13 char:58
    +                                                         }
    +                                                          ~
    The hash literal was incomplete.
    At line:20 char:2
    +  }
    +  ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : IncompleteHashLiteral
    

    如果我用以下代码替换OperatingHours语句,则脚本运行成功。但在这样做时,我无法满足上述选项(1)。

    Operating Hours =   if (!($_ | select -expand Tags).OperatingHours) 
                           {"Tag not present"} 
                        else {($_ | select -expand Tags).OperatingHours} ;
    

    请告诉我如何更正并获得所需的输出。

    由于

1 个答案:

答案 0 :(得分:0)

经过大量的打击和试验以及严格的测试后,我找到了我想要的东西:

OperatingHours = if ( ($_ | select -expand Tags).OperatingHours -ieq $null ) 
                     {"TAG NOT PRESENT"} 
                 elseif ( ($_ | select -expand Tags).OperatingHours -ieq '') 
                     {"NULL/EMPTY"} 
                 else 
                     {($_ | select -expand Tags).OperatingHours } ;

我将原始脚本中的OperatingHours语句替换为上面的内容。

解决方案看起来很简单,找到之后我就好像我之前可以错过的那样,但这就是学习过程的全部内容,对吧?