75
PowerShellの基本:ループを使ったプログラミング

この PowerShell チュートリアルでは、For ループ、ForEach-Object ループ、While ループ、Do-While ループ、Do-Until ループの使用方法を説明します。

PowerShellには複数の種類のループが用意されており、多くの場合、複数のループ手法を効果的に使用できます。パフォーマンスやコードの可読性の観点から、最も効率的なループの種類を決定する必要がある場合もあります。

ForEach-Object ループ

多くの場合、オブジェクトをループ処理するには、 ForEach-Objectコマンドレット(PowerShellオブジェクトの操作に関する記事で以前説明しました)を使用するのが最適です。最もシンプルなForEach-Objectコマンドレットでは、ループ処理するオブジェクトと、オブジェクトの各メンバーに対して実行するコマンドを含むスクリプトブロックのみが必要です。

これらのパラメータは、-InputObjectおよび-Processパラメータ名で指定するか、オブジェクトを ForEach-Object コマンドレットにパイプし、スクリプトブロックを最初のパラメータとして指定することで指定できます。この基本構文を説明するために、次の例では、ForEach-Object を使用してユーザーの Documents フォルダの内容をループ処理する 2 つの方法を示します。

$myDocuments = Get-ChildItem $env:USERPROFILEDocuments -File $myDocuments | ForEach-Object {$_.FullName} ForEach-Object -InputObject $myDocuments -Process {$_.FullName}

特定のシナリオでは、ループ実行の直前または直後に1つ以上のアクションを実行することが効果的な場合があります。-Beginおよび-Endパラメータを使用すると、-Process スクリプトブロックの内容の直前または直後に実行するスクリプトブロックを定義できます。これにより、ループ実行の前後に変数を設定または変更することができます。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

ForEach-Object にはForEach% という2つのエイリアスがあり、PowerShell 3.0以降では短縮構文もサポートされています。以下の3つの例は機能的に同一です。

Get-WMIObject Win32_LogicalDisk | ForEach-Object {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | ForEach {$_.FreeSpace} Get-WMIObject Win32_LogicalDisk | % FreeSpace

PowerShell の For ループ

Forループは通常、一連のコマンドを指定された回数だけ反復処理するために使用されます。これは、配列やオブジェクトをステップ実行する場合や、同じコードブロックを必要に応じて繰り返す場合に使用します。Forループは、ループに入る際の変数の値、ループを終了する条件、そしてループを実行するたびにその変数に対して実行されるアクションを設定することで構築されます。

次の例は、掛け算表を作成するために使用される基本的な For ループを示しています。

($i=0; $i -le 10; $i++) の場合 { "10 * $i = " + (10 * $i) }

forループは、配列のインデックスを初期値に設定し、配列の長さに達するまで値を段階的に増加させることで、配列の値を段階的に処理するために使用できます。配列のインデックスは、次の例に示すように、変数名の直後に角括弧で囲み、増加後の変数を記述することで指定します。

$colors = @("赤","オレンジ","黄","緑","青","藍","紫") For ($i=0; $i -lt $colors.Length; $i++) { $colors[$i] }

While、Do-While、Do-Until ループ

PowerShellがサポートする3つ目のループの種類は、条件を設定するものです。条件は、条件が満たされる間、または条件が満たされるまでループ処理を継続します。WhileループDo-Whileループはどちらも、条件が$trueと評価される間、アクションを実行するために使用されますが、構文のみが異なります。Do -UntilループはDo-Whileループと構文が似ていますが、条件文が満たされると処理を停止します。

Do-WhileループとDo-Untilループはどちらも、スクリプトブロックの先頭にDoキーワードを置き、その後に条件キーワード(WhileまたはUntil)と条件を記述することで始まります。例えば、以下の2つのループは条件が逆になっているだけで、動作は全く同じです。

$i=1 Do { $i $i++ } While ($i -le 10)$i=1 Do { $i $i++ } Until ($i -gt 10)

whileループはDo-Whileループと全く同じ動作をしますが、構文が少し異なります。whileループはWhileキーワード、条件、そして最後にスクリプトブロックのみを使用します。このループは前述の例と機能的には同じで、Do-Whileループと同じ条件を使用します。

$i=1 ですが ($i -le 10) { $i $i++ }

Do-While ループ、Do-Until ループ、While ループの 3 つのループ タイプはいずれも、無期限にループするために使用できます。While ループと Do-While ループでは条件が $true に設定され、Do-Until では条件が $false に設定されます。

状況によっては、ループの条件以外の理由でループを早期に終了する必要があることがあります。このような場合は、Breakキーワードを使用してループを終了できます。最後の例では、同じ機能を示していますが、無限ループとBreakキーワードを使用して適切なタイミングで終了しています。

$i=1 while ($true) { $i $i++ if ($i -gt 10) { Break } }

  • PowerShell の比較演算子と条件付きロジック
  • PowerShell: 変数、配列、ハッシュテーブルの使用
  • PowerShellの基本:ファイルとフォルダの管理