2017-08-22 5 views
0

Je crée un script qui mettra à jour une feuille de calcul Excel en fonction des conditions.Powershell Switch - Multiple Clauses

C'est ce que j'ai actuellement:

if ($endIRs -ne $null) { 
$endIRs | ForEach-Object { 
    try { 
     $classification = $_.Classification 
     $priority = $_.Priority 
     $title = $_.Title 
     $id = $_.Id 

     switch ($classification) { 
      {($_ -eq 'Reports') -and ($priority -eq '1')} { 
      $GeAppsReportSheet.Cells.Item(8,2).Interior.ColorIndex = 3 
      $GeAppsReportSheet.Cells.Item(8,2) = 'RED' 
      } 
      #more switch statements to go here 
     } 
    catch {#catch tickets with $classification not listed} 
    } 
} 

Le $endIRs au début détient une série de haute priorité « incidents » qui ont été enregistrés au cours des 12 dernières heures. S'il n'y en a pas, tout sera "GREEN" qui est défini par défaut. Ce que j'essaye de réaliser avec l'instruction switch est if (($classification -eq 'Reports') -and ($priority -eq '1')) {'change the cell colour and text'} que je peux faire seul, mais j'en ai besoin pour vérifier si la priorité est "1" ou "2" et faire quelque chose de différent par rapport aux "Rapports" cellule de classification dans la feuille de calcul.

Pouvez-vous faire une instruction if dans l'instruction switch, ou y a-t-il une meilleure façon de le faire?

Répondre

2

Vous pouvez utiliser $true comme condition switch et de mettre les chèques en tant que valeurs ScriptBlock:

switch ($true) { 
    {($classification -eq 'Reports') -and ($priority -eq '1')} { 
     ... 
    } 
    # ... 
    # more switch statements to go here 
    # ... 
    default { 
     ... 
    } 
} 

Je ne ai jamais aimé cette approche, cependant. J'ai toujours l'air d'un hack horrible pour moi. Je préfère une structure de contrôle if..elseif..else:

if ($classification -eq 'Reports' -and $priority -eq '1') { 
    ... 
} elseif (...) { 
    ... 
} elseif (...) { 
    ... 
} else { 
    ... 
} 

Edit: Bien sûr, vous pouvez également utiliser une déclaration "régulière" switch et nid d'autres conditionals dans l'action scriptblocks:

switch ($classification) { 
    'Reports' { 
     if ($priority -eq '1') { 
      ... 
     } elseif ($priority -eq '2') { 
      ... 
     } 
    } 
    # ... 
    # more switch statements to go here 
    # ... 
    default { 
     ... 
    } 
} 
+0

Je reçois ce qu'il veut maintenant. Je ne le lisais pas bien. – Matt

+0

Désolé pour ma mauvaise explication Matt. @Ansgar - mes pensées étaient quelque chose comme: 'switch ($ classification) { 'Reports' {if ($ priorité -eq '1') {cellule de couleur ROUGE} elseif ($ priority -eq ' 2 ') {cellule couleur AMBER}} } ' - ce genre de chose, si cela a du sens? –

+0

@RossLyons C'est certainement une option. Voir la mise à jour –