2017-05-19 1 views
0

J'essaie d'extraire les détails de la balise OperatingHours de tous les Azure VirtualMachines et de Azure SqlDatabases. Voici la possibilité pour appID dans une ressource et les valeurs que je dois imprimer en sortie en conséquence:Répertoriez toutes les ressources azur avec des variables et des variables à l'aide de PowerShell

  1. Si étiquette OperatingHours lui-même est présent dans aucune ressource puis « Tag pas présent »
  2. si tag OperatingHours est présent mais contient une chaîne vide ou vide puis affiche "NULL/EMPTY"
  3. si la balise OperatingHours est présente avec une autre valeur, puis affichez cette valeur.

Dois-je m'occuper de l'option (2) séparément ou est-ce comme si j'imprimais une valeur normale des heures de fonctionnement?

Après de longs efforts que j'ai créé script suivant:

$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 

Lors de l'exécution de ce script, je reçois l'erreur suivante:

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 

Si je remplace la déclaration OperatingHours avec le code suivant alors le script fonctionne avec succès. Mais ce faisant, je ne suis pas en mesure de satisfaire l'option (1) mentionnée ci-dessus.

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

S'il vous plaît me conseiller sur la façon de corriger cela et obtenir la sortie requise.

Merci

Répondre

0

Après beaucoup de succès et d'essais et de tests rigoureux, j'ai trouvé ce que je cherchais:

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

Je remplacé la déclaration OperatingHours dans le script original ci-dessus.

La solution a l'air facile et après l'avoir trouvé, j'ai été comme comment pourrais-je rater cela plus tôt, mais c'est ce que le processus d'apprentissage est, non?