使用case-insensetive读取-ExpandProperty键

时间:2017-05-20 04:01:57

标签: powershell azure scripting azure-powershell

我的以下脚本已成功运行。但它不是在不区分大小写的情况下读取Tags字段。

$resources = Get-AzureRmResource | Where-Object {($_.ResourceType -eq "Microsoft.Compute/virtualMachines") -or ($_.ResourceType -eq "Microsoft.Sql/servers/databases")} |
 foreach {

   new-object -TypeName psobject -Property @{
                                    ResourceName       =       $_.ResourceName;
                                    ResourceType       =       $_.ResourceType;
                                    OperatingHours  =   
                                                        if ( ($_ | select -expand Tags).OperatingHours -ieq $null ) 
                                                        {"TAG NOT PRESENT"} 
                                                        elseif ( ($_ | select -expand Tags).OperatingHours -ieq '') 
                                                        {"NULL/EMPTY"} 
                                                        else 
                                                        {($_ | select -expand Tags).OperatingHours} ;
                                             }
          }
$resources | Format-Table

上述脚本的输出是:

ResourceType                        ResourceName       OperatingHours            
------------------------            --------------     ------------------            
Microsoft.Compute/virtualMachines   asa-perfvm16       TAG NOT PRESENT
Microsoft.Compute/virtualMachines   OAASLogicApps1     TAG NOT PRESENT
Microsoft.Compute/virtualMachines   VMForPerfTest      TAG NOT PRESENT

在这里,有些资源没有' OperatingHours'而是他们有'操作时间'或者' Operatinghours'或任何其他案件组合。此值由用户设置,因此可以是任何大小写组合。 我上面的脚本没有获取与Tags.Key的大小写不敏感相关的正确数据。我并不关心Tags.Value的情况。

我尝试用以下内容修改上面的脚本,但输出仍然相同。出现在输出中的三个资源列表;所有资源都是由我创建的,因此我确信所有资源都存在于所有资源中,但具有不同的情况。

修改过的脚本(但没有成功):

$resources = Get-AzureRmResource | Where-Object {($_.ResourceType -eq "Microsoft.Compute/virtualMachines") -or ($_.ResourceType -eq "Microsoft.Sql/servers/databases")} |
 foreach {
         
        $rTags = @{}
            foreach($key in $resources.Tags.key)
            {
                      $rTags.Add($key.ToLower(), $resources.Tags[$key].ToLower())
            }

   new-object -TypeName psobject -Property @{
             ResourceName       =       $_.ResourceName;
             ResourceType       =       $_.ResourceType;
             OperatingHours =   
                  if     ( $rTags.OperatingHours -ieq $null ) 
                               {"TAG NOT PRESENT"} 
                  elseif ( $rTags.OperatingHours -ieq '') 
                               {"NULL/EMPTY"} 
                  else 
                               {$rTags.OperatingHours} ;
                                             }
          }
$resources | Format-Table

请告诉我我在哪里错了!!!

1 个答案:

答案 0 :(得分:0)

我知道这必须是一个非常小的变化。以下是帮助我获取所需输出的更新脚本。

function sortByValue(a, b) {
  var aVal = parseInt($(a).find('input').val(), 10),
    bVal = parseInt($(b).find('input').val(), 10);
  return order.indexOf(aVal) > order.indexOf(bVal);
}

var order = [3, 5, 0, 1, 2];
var $container = $("div.wpgmza_cat_checkbox_holder");
$container.children("div").sort(sortByValue).appendTo($container);

我做了哪些改变?

  1. 使用Hastable
  2. 使用 $ _ 而不是 $ resources 是啊...一个非常严重的错误:P