2017-08-22 10 views
0

条件に応じてExcelスプレッドシートを更新するスクリプトを作成しています。Powershellスイッチ - 複数の句

これは私が現在持っているものです:開始時

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} 
    } 
} 

$endIRsは、最後の12時間で記録された優先度の高い「事件」のシリーズを保持しています。存在しない場合は、すべてがデフォルトで「緑色」に設定されます。

私がswitchの文で達成しようとしているのは、私自身で行うことができるif (($classification -eq 'Reports') -and ($priority -eq '1')) {'change the cell colour and text'}ですが、優先度が「1」か「2」かどうかをチェックし、スプレッドシート内の分類セル。

switchステートメントの中でifステートメントを実行することはできますか、それとももっと良い方法がありますか?

答えて

2

あなたはswitch条件として$trueを使用してスクリプトブロック値としてチェックを入れることができます。

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

私は本当にしかし、このアプローチを言っていません。常に私には醜いハックのように見えました。

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

:あなたもアクションscriptblocksで "通常の" switch声明や巣他の条件文を使用することができます。もちろん、:編集

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

:私はif..elseif..else制御構造を好みます私は今彼が望むものを手に入れます。それは正しいとは言いませんでした。 – Matt

+0

私の貧しい説明のために申し訳ありませんマット。 @Ansgar - 私の考えは次の行に沿ったものでした: 'switch($ classification){ 'レポート' {if($ priority -eq '1'){カラーセル赤色} elseif($ priority -eq ' 2 '){color cell AMBER}} } ' - それは意味があるのでしょうか? –

+0

@RossLyonsこれは確かにオプションです。更新された回答をご覧ください。 –