PowerShell Alias - foreach
 記事記号:[mcAc84] 初版:2010/Dec/28

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    ForEach-Object
    
概要
    各入力オブジェクトに対して操作を実行します。
    
構文
    ForEach-Object [-Process] <ScriptBlock[]> [-Begin <scriptblock>] 
    [-End <scriptblock>] [-InputObject <psobject>] [<CommonParame
    ters>]
    
説明
    ForEach-Object コマンドレットは、各入力オブジェクトに対して操作を実行します。
    入力オブジェクトは、コマンドレットにパイプするか、InputObject パラメーターに
    指定することができます。
    
    実行する操作は、Process パラメーターの値としてコマンドレットに提供されるスク
    リプト ブロック内に記述します。スクリプト ブロックには、任意の Windows Power
    Shell スクリプトを記述できます。
    
    スクリプト ブロック内では、現在の入力オブジェクトは $_ 変数で表されます。
    各入力オブジェクトに対して実行する操作を記述したスクリプト ブロックを使用す
    るだけでなく、2 つのスクリプト ブロックを追加で作成することもできます。2 つ
    のうち、Begin パラメーターの値に指定されるスクリプト ブロックは、最初の入力
    オブジェクトの処理よりも先に実行されます。End パラメーターの値に指定されるも
    う 1 つのスクリプト ブロックは、最後の入力オブジェクトの処理が完了した後に実
    行されます。
    
    Begin と End で指定するスクリプト ブロックを含め、すべてのスクリプト ブロッ
    クの評価結果がパイプラインを介して渡されます。
    
パラメーター
    -Begin <scriptblock>
        どの入力オブジェクトの処理よりも前に実行するスクリプト ブロックを指定し
        ます。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -End <scriptblock>
        すべての入力オブジェクトの処理が完了した後に実行するスクリプト ブロック
        を指定します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -InputObject <psobject>
        process パラメーターで指定されたスクリプト ブロックの操作対象となるオブ
        ジェクトを受け入れます。オブジェクトが格納されている変数を入力するか、
        オブジェクトを取得するコマンドまたは式を入力します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   true (ByValue)
        ワイルドカード文字を許可する false
        
    -Process <ScriptBlock[]>
        各入力オブジェクトに適用するスクリプト ブロックを指定します。
        
        必須                         true
        位置                         1
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help about_commonparameters」と入力してヘルプを参照してください。
    
入力
    System.Management.Automation.PSObject
        パイプを使用して、あらゆるオブジェクトを ForEach-Object に渡すことができ
        ます。
    
出力
    System.Management.Automation.PSObject
        ForEach-Object によって返されるオブジェクトは、入力によって決まります。
    
メモ
    -------------------------- 例 1 --------------------------
    C:\PS>30000,56798,12432 | foreach-object -process {$_/1024}
    
    説明
    -----------
    このコマンドは、整数の配列を受け取り、各配列要素を 1024 で除算して結果を表示
    します。
    
    -------------------------- 例 2 --------------------------
    C:\PS>get-childitem C:\ | foreach-object -process { $_.length / 1024 }
    
    説明
    -----------
    このコマンドは、C: ドライブのルートにあるすべてのファイルとディレクトリを取
    得し、それぞれのサイズを表示します。0 は、ファイル サイズを取得できなかった
    ディレクトリを表します。
    
    -------------------------- 例 3 --------------------------
    C:\PS>$events = get-eventlog -logname system -newest 1000
    
    C:\PS> $events | foreach-object -begin {get-date} -process {out-file -fil
    epath events.txt -append -inputobject $_.message} -end {get-date}
    
    説明
    -----------
    このコマンドは、システム ログから最新のイベントを 1000 個取得し、$events 変
    数に保存します。次に、パイプを使用して、そのイベントを ForEach-Object コマン
    ドレットに渡します。Begin パラメーターによって現在の日付と時刻が表示されます。
    次に、Process パラメーターの Out-File コマンドレットが実行されます。これによ
    り、events.txt という名前のテキスト ファイルが作成され、各イベントの message 
    プロパティがそのファイルに保存されます。最後に、End パラメーターによってすべ
    ての処理が完了した後の日付と時刻が表示されます。
    
    -------------------------- 例 4 --------------------------
    C:\PS>get-itemproperty -path hkcu:\Network\* | foreach-object {set-itemp
    roperty -path $_.pspath -name RemotePath -value $_.RemotePath.ToUpper();}
    
    説明
    -----------
    このコマンドは、HKCU:\Network キーの下にあるすべてのサブキーの RemotePath レ
    ジストリ エントリ値を大文字のテキストに変更します。このコマンド形式を使用し
    て、レジストリ エントリ値の形式または内容を変更できます。
    
    Network キーの各サブキーは、ログオン時に再接続されるマッピングされたネットワ
    ーク ドライブを表します。RemotePath エントリには、接続されたドライブの UNC 
    パスが含まれます。たとえば、E: ドライブを \\Server\Share にマッピングした場
    合、HKCU:\Network に E サブキーが作成され、E サブキーの RemotePath レジスト
    リ エントリの値は \\Server\Share となります。
    
    このコマンドは、Get-ItemProperty コマンドレットを使用して Network キーのすべ
    てのサブキーを取得し、Set-ItemProperty コマンドレットを使用して各キーの Remo
    tePath レジストリ エントリの値を変更します。Set-ItemProperty コマンドでは、
    このパスはレジストリ キーの PSPath プロパティの値です (これは、レジストリ キ
    ーを表す Microsoft .NET Framework オブジェクトのプロパティであり、レジストリ 
    エントリではありません)。このコマンドは、RemotePath の値の ToUpper() メソッ
    ドを使用します。これは文字列 (REG_SZ) です。
    
    Set-ItemProperty が各キーのプロパティを変更しているため、プロパティにアクセス
    するには ForEach-Object コマンドレットが必要です。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=113300
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Alias、foreach
ご利用数: 1915289
感想・要望・問い合わせは こちら