PowershellGet-ContentとForEachの使用方法と例

2021年6月17日 16866 ビュー PowerShellのキャッチ例を試す

このSゾーンでは、PowerShellGet-ContentをForEachループと組み合わせる方法を説明します。 Get-Contentを使用してテキストファイルのコンテンツを一覧表示してから、ForEachステートメントを使用してテキストファイルのコンテンツを反復処理できます。

PowerShellForEachには3つのバリエーションがあります。 ForEachステートメントとForEachメソッドがあります。
さらに、ForEach-Objectコマンドレットがあります。

このガイドは、Get-Contentコマンド(その構文、パラメーター、およびいくつかの例)について説明することから始まります。

次に、ガイドの残りの部分で、PowerShellForEachとGet-Contentの3つのバリアントをそれぞれ使用する方法を学習します。 ForEachの各バリアントについて、その構文について説明します。

最後に、PowerShellForEachバリアントとGet-Contentの使用方法の複数の例を示します。

投稿トピックを閲覧する

Get-Contentコマンド:構文、パラメーター、例

Get-Contentコマンド:構文、パラメーター、例

はじめに述べたように、PowerShell ForEachを使用してファイルのコンテンツを反復処理する前に、まずテキストファイルのコンテンツをPowerShellにインポートする必要があります。

Get-Contentコマンドレットは、テキストファイルのコンテンツを一覧表示またはPowerShellにインポートするために使用されます。

このセクションでは、Get-Contentの構文とパラメーターについて説明します。いくつかの例でセクションを終了します。

Get-Contentコマンドの構文とパラメーター

Get-Contentコマンドの簡略化された構文は…

Get-Content [-Path] 

Get-Contentにはさらに多くのパラメーターがあります。一般的に使用されるパラメーターを指定しました。

使用 - テキストファイルへのフルパス()を指定するパラメータ。テキストファイルの拡張子(.txt)を含める必要があります。

The パラメーターは位置0にあるため、指定する必要はありません。 Get-Contentの直後に値を入力できます。 PowerShellパラメーターの詳細については、ガイド–PowerShellパラメーターパラメーター属性を参照してください。

Get-Contentコマンドの例

以下のスクリーンショットはサーバーのリストです。テキストファイルの内容をPowerShellにインポートするには、次のコマンドを実行します…

Get-Content D:PS-TutorialS ZonesS Zones-Servers.txt

このコマンドは、テキストファイル内のサーバーのリストを表示します。

Get-ContentでPowerShellForEachステートメントを使用する方法

Get-ContentでPowerShellForEachループを使用する方法

このセクションでは、の結果をパイプする方法を学習します Get-Content の中へ ForEach ループ。次に、 ForEach ブロックをループし、特定のタスクを実行します。

このセクションは、PowerShell ForEachLoopの構文について説明することから始まります。

PowerShellForEachステートメントの構文

PowerShell ForEachステートメントは、入力オブジェクトのコレクション内の各アイテムに対して操作を実行します。このガイドの目的上、操作はテキストファイル内のアイテムに対して実行されます。

ForEachステートメントの構文は次のとおりです。

ForEach ($item in $collection) { Perform a task based on a powershell command } 

予想どおり、構文は「ForEach」で始まります。その後に角かっこ「()」が続きます。そして最後に「{}」ブロック。

このガイドの最初のセクションでは、テキストファイルのコンテンツをインポートする方法の例を示しました。 Get-Content 。これがコマンドです…

Get-Content D:PS-TutorialS ZonesS Zones-Servers.txt

これをForEachステートメントの構文に含めると、ForEachステートメントは次のように更新されます。

ForEach ($item in (Get-Content D:PS-TutorialS ZonesS Zones-Servers.txt)) { Perform a task based on a powershell command } 

更新されたForEachステートメントの構文で、 $ collection 変数 Get-Content D: PS-Tutorial S Zones S Zones-Servers.txt 指図。

さらに、このコマンドをに保存できます $ collection 変数…

$collection = Get-Content D:PS-TutorialS ZonesS Zones-Servers.txt

次に、ForEachステートメント構文の簡略化されたバージョンを使用できます…

ForEach ($item in $collection) { Perform a task based on a powershell command } 

この強力なPSステートメントの詳細については、PowerShell ForEach:構文、パラメーター、例をクリックしてください。

このセクションの残りのサブセクションでは、さらに多くの例を示します。

ForEachステートメントを使用してテキストファイルを反復処理する方法

このサブセクションでは、ForEachステートメントのコマンドブロックにいくつかのコマンドを追加します。更新されたコマンドは次のとおりです。

$collection = Get-Content D:PS-TutorialS ZonesS Zones-Servers.txt ForEach ($item in $collection) { write-host $item } 

PowerShell ISEでスクリプトを実行すると、テキストファイルの内容が表示されます。

スクリプトの最初の行では、Get-Contentを使用してテキストファイルのコンテンツをPowerShellにインポートしました。次に、PowerShell ForEachステートメントを使用してコンテンツを反復処理し、コマンドwrite-host $ itemを使用してコンテンツを一覧表示しました。

PowerShell Get-ChildItem、ForEachループ、およびGet-Contentを組み合わせる方法

フォルダに複数のテキストファイルがある場合は、最初にテキストファイルへのフルパスを取得する必要があります。テキストファイルのフルパスを取得するには、Get-ChildItemコマンドが必要です。

これを説明するために、1つのフォルダーに2つのテキストファイルを作成しました。以下のスクリーンショットを参照してください…

PowerShell Get-ChildItem、ForEachループ、およびGet-Contentを組み合わせる方法

先に述べたように、最初のステップは、フォルダー内のすべてのテキストファイルへのパスを取得することです。これがこの仕事をするコマンドです…

(Get-ChildItem D:PS-TutorialS Zones).FullName

このコマンドは、テキストファイルへのフルパスを一覧表示します…

ただし、フォルダ内に他のアイテム(サブフォルダや他の種類のファイルなど)がある場合は、テキストファイルのみを返すようにコマンドを改善する必要があります…

$textfiles = (Get-ChildItem D:PS-TutorialS Zones | Where-Object {$_.Extension -eq '.txt'}).FullName
コマンドの結果を変数に保存して、後続のコマンドを短縮しました。

フォルダ内のすべてのテキストファイルへのパスができたので、次のステップはGet-Contentを使用して各テキストファイルのコンテンツを一覧表示することです。ただし、複数のテキストファイルがあるため、ForEachステートメントを使用する必要があります。

$textfiles = (Get-ChildItem D:PS-TutorialS Zones | Where-Object {$_.Extension -eq '.txt'}).FullName ForEach ($textfile in $textfiles) { Get-content $textfile }

これがPowerShellISEのスクリプトの結果です…

PowerShell Get-ChildItem、ForEachループ、およびGet-Contentを組み合わせる方法

テキストファイルのコンテンツを含むフォルダを作成する方法

このサブセクションでは、テキストファイルのコンテンツを使用してフォルダを作成する方法を学習します。

これを示すために、名前の付いたテキストファイルがあります。

Get-Contentを使用して、テキストファイルのコンテンツをPowerShellにインポートします。次に、ForEachステートメントブロックを使用して、テキストファイルの内容を繰り返します。

最後に、ForEachステートメントブロック内で、 感謝 テキストファイルの内容でフォルダを作成するコマンド。

ただし、これまでのようにコマンドを分離するのではなく、すべてのコマンドを組み合わせます。これがスクリプトです…

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) {cd 'D:PS-Tutorial';mkdir $filename}

このコマンドでは、Windowsコマンドプロンプトコマンドを使用しました。 CDmkdir 。これがPowerShellバージョンのコマンドです…

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) { New-Item -Path 'D:PS-Tutorial' -Name $filename -ItemType Directory }

そして、これがPoweShellISEの結果です。

または、作成されたフォルダーに関する情報を表示したくない場合は、の出力をパイプ処理します。 新商品 にコマンド アウトヌル

スクリプトは次のようになります…

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) New-Item -Path 'D:PS-Tutorial' -Name $filename -ItemType Directory  

分割してから、テキストファイルのコンテンツをGet-ContentおよびForEachステートメントで結合する方法

この記事を調べているときに、これに出くわしました stackoverflow.com 質問。質問をした人は、次の文字列を含むテキストファイルを持っています。

80055555|Lastname|Firstname|AidYear|DCDOCS|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

ただし、その人は文字列を次のように変更したいと考えています。

80055555|DCDOCS|Lastname|Firstname|AidYear|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

この状況を再現するために、元の文字列を使用してテキストファイルを作成しました。次に、必要な結果を達成する短いスクリプトを作成しました。

これがスクリプトです。

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content $file $newfile = ForEach($line in $filecontent)' $newfile | Set-Content $file

1行目と2行目は比較的簡単です。 1行目で、テキストファイルのパスを変数に保存しました。

次に、2行目で使用しました Get-Content テキストファイルの内容をPowerShellにインポートし、結果を別の変数に保存します。

最後に、3、4、5行目で、 Get-Content PowerShellForEachステートメントのコマンド。 ForEachステートメントの結果を別の変数に保存しました。

ForEachステートメントの中で最も重要なのは、コマンドブロックにあるものです…

($line.split('|'))[0,4,1,2,3,5] -Join '|'

コマンドの最初の部分では、PowerShell Splitメソッドを使用して、テキストファイルの内容を分割します。これがコマンドです…

($line.split('|'))

このコマンドが行うことは、|でテキストファイルの文字列を壊すことです。キャラクター。これに関連するのを助けるために、ここにテキストファイルの元の文字列があります。

80055555|Lastname|Firstname|AidYear|DCDOCS|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

splitコマンドの結果は、次の個別の文字列を作成します。

80055555 Lastname Firstname AidYear DCDOCS D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

PowerShell splitがこのような個別の文字列を作成する場合、各アイテムは0(ゼロ)から始まる位置番号で表されます。したがって、最初の文字列にアクセスできます。 80055555 [0]で、2番目は[1]で、というように続きます。

コマンドの次の部分を説明する前に、達成したい出力を見てみましょう。ここにあります…

80055555|DCDOCS|Lastname|Firstname|AidYear|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

PowerShell Splitを使用してこの出力を分割すると、これが達成されます…

80055555 DCDOCS Lastname Firstname AidYear D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

これを元の文字列を分割したときの結果と比較すると、元のテキストファイルの4番目の位置にある部分文字列( DCDOCS )は位置2になります。他のすべての部分文字列は元の位置を保持します。

これは、コマンドの2番目のビットのジョブが示されている場所です…

[0,4,1,2,3,5] 

このコマンドは単に…を意味します

80055555,DCDOCS,Lastname,Firstname,AidYear,D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf
説明のために部分文字列を区切るために、コマ(、)を含めました。コマンドにはコマが含まれていません。

これまで、このコマンドについて説明してきました。

($line.split('|'))[0,4,1,2,3,5] -Join '|'

この時点まで…

($line.split('|'))[0,4,1,2,3,5]

最後のビットは、PowerShell結合演算子を使用して、このコマンドによって作成された新しい文字列の間に元の文字|を挿入します…

[0,4,1,2,3,5]

最後の数段落で、このスクリプトの4行目を説明しました。

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content $file $newfile = ForEach($line in $filecontent) ($line.split(' $newfile | Set-Content $file

最後に、6行目で、に保存された新しい文字列の出力をパイプ処理しました newfile 変数に セットコンテンツセットコンテンツ 元のファイルを新しい文字列で上書きします。

これは、Get-ContentをPowerShellForEachステートメントと組み合わせる方法の優れた例です。

Get-ContentでPowerShellForEachメソッドを使用する方法

Get-ContentでPowerShellForEachメソッドを使用する方法

ForEachメソッドはPowerShellバージョン4で導入されました。このメソッドは、PowerShellスクリプト開発者にテキストファイルのコンテンツを反復する別の方法を提供します。

このセクションでは、複数の例を使用して、Get-ContentでForEachメソッドを使用する方法を学習します。

このセクションは、ForEachメソッドの構文から始まります。

PowerShellForEachメソッドの構文

PowerShellForEachメソッドの構文は…

().ForEach ({  } )

オブジェクトのForEachメソッドへのアクセスは、他のPowerShellメソッドへのアクセスと同様です。唯一の違いは、ForEachメソッドの()ブロック内に{}ブロックが含まれていることです。

PowerShell Get-ChildItem、ForEachメソッド、およびGet-Contentを組み合わせる方法

このガイドのForEachステートメントのセクションで、以下のスクリプトを共有しました…

$textfiles = (Get-ChildItem D:PS-TutorialS Zones | Where-Object {$_.Extension -eq '.txt'}).FullName  
ForEach ($textfile in $textfiles) {
Get-content $textfile

}

使用したスクリプト Get-ChildItem このフォルダ内のテキストファイルへのフルパスを返すには…

PowerShell Get-ChildItem、ForEachメソッド、およびGet-Contentを組み合わせる方法

これがForEachメソッドの同等のスクリプトです…

$textfiles = (Get-ChildItem D:PS-TutorialS Zones | Where-Object {$_.Extension -eq '.txt'}).FullName $textfiles.ForEach({ Get-content $_ } )

ForEachメソッドを使用してテキストファイルのコンテンツを含むフォルダーを作成する方法

前のサブセクションの例と同様に、このガイドのForEachステートメントセクションで以下のスクリプトを使用しました…

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) Out-Null   

スクリプトはGet-ContentとForEachステートメントを使用して、以下のスクリーンショットのテキストファイルのコンテンツを使用してフォルダーを作成しました…

コマンドを使用するForEachステートメントとは異なり…

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) 

PowerShell ForEachメソッドは、次のようなGet-Contentの結果でForEachメソッドを呼び出します…

(Get-Content D:PS-Tutoriallist.txt).ForEach() 

次に、()ブロック内に、{}ブロックを挿入して、 新商品 指図。ただし、を使用する代わりに $ filename 変数、今回は$ _自動変数を使用します

 New-Item -Path 'D:PS-Tutorial' -Name $_ -ItemType Directory  | Out-Null  

スクリプトの最終的なForEachメソッドバージョンは次のようになります…

(Get-Content D:PS-Tutoriallist.txt).ForEach( New-Item -Path 'D:PS-Tutorial' -Name $_ -ItemType Directory   )

今回は、PowerShellISEではなくPowerShellでコマンドを実行したいと思います。したがって、スクリプト全体を1行にまとめます…

(Get-Content D:PS-Tutoriallist.txt).ForEach(New-Item -Path 'D:PS-Tutorial' -Name $_ -ItemType Directory  )

これがPowerShellのコマンドと作成されたフォルダーです。フォルダ名を含むテキストファイルのスクリーンショットも含めました…

ForEachメソッドを使用してテキストファイルのコンテンツを含むフォルダーを作成する方法

分割してから、Get-ContentおよびForEachメソッドを使用してテキストファイルのコンテンツを結合する方法

このガイドのForEachステートメントのセクションで、この例を示しました。 stackoverflow.com 質問。質問をした人は、テキストファイルの次の文字列を変更したいと考えています…

80055555|Lastname|Firstname|AidYear|DCDOCS|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

これに…

80055555|DCDOCS|Lastname|Firstname|AidYear|D:BDMS_UPLOAD800123456_11-13-2018 14-35-53 PM_1.pdf

この問題を解決するために、Get-ContentとPowerShellForEachステートメントを使用するこのスクリプトを作成しました…

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content $file $newfile = ForEach($line in $filecontent)'))[0,4,1,2,3,5] -Join ' $newfile | Set-Content $file

ガイドのこのセクションでは、使用方法について説明しています Get-Content ForEachメソッド、これはForEachメソッドと同等のスクリプトです…

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content D:PS-Tutorialfilelist.txt $newfile = $filecontent.ForEach(' ) $newfile | Set-Content $file

この変更されたバージョンでは、ForEachステートメントをForEachメソッドに置き換えたことを除いて、変更されたものは同じです。

Get-ContentでPowerShellForEach-Objectコマンドレットを使用する方法

Get-ContentでPowerShellForEach-Objectコマンドレットを使用する方法

この最後のセクションでは、最初の2つのセクションですでに示した例のいくつかを繰り返します。

ただし、このセクションでは、ForEachステートメントやForEachメソッドをForEach-Objectコマンドレットに置き換えます。

このセクションは、ForEach-Objectコマンドレットの構文から始まります。

ForEachの構文-オブジェクトコマンドレット

ForEach-Objectには2つの構文があります。簡略化されたバージョンは次のとおりです。

ForEach-Object [-MemberName] [-InputObject]
ForEach-Object [-Process] [-Begin] [-End] [-InputObject]

ForEach-Objectの構文は複雑に見える場合があります。ただし、非常に使いやすいです。このガイドでは、 InputObject パラメータ。

これは、入力をForEach-Objectにフィードするパラメーターです。さらに、 InputObject パイプライン経由で送信することもできます…

<  InputObject   > | ForEach-Object

ForEach-Objectコマンドレットを使用してテキストファイルのコンテンツを含むフォルダーを作成する方法

このガイドの最初と2番目のセクションでは、次のスクリプトを作成しました。

ForEach ($filename in Get-Content D:PS-Tutoriallist.txt) Out-Null   
(Get-Content D:PS-Tutoriallist.txt).ForEach( Out-Null  )

最初のスクリプトは、Get-Content ForEachステートメントを使用して、以下のスクリーンショットのテキストファイルのコンテンツを使用してフォルダーを作成します…

さらに、2番目のスクリプトはGet-ContentForEachメソッドを使用して同じタスクを実行します。

ForEachステートメントまたはForEachメソッドの代わりにForEach-Objectコマンドレットを使用する場合、スクリプトは次のように変更されます…

Get-Content D:PS-Tutoriallist.txt | ForEach-Object Out-Null  

分割してから、テキストファイルのコンテンツをGet-ContentおよびForEach-Objectコマンドレットで結合する方法

ForEachステートメントとForEachメソッドのセクションで、これを修正するために次のスクリプトを作成しました stackoverflow.com 質問。

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content $file $newfile = ForEach($line in $filecontent) ($line.split(' $newfile | Set-Content $file
$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content D:PS-Tutorialfilelist.txt $newfile = $filecontent.ForEach(' ) $newfile | Set-Content $file

同じスクリプトのForEach-Objectコマンドレットバージョンは次のとおりです。

$file = 'D:PS-Tutorialfilelist.txt' $filecontent = Get-Content D:PS-Tutorialfilelist.txt $newfile = $filecontent | ForEach-Object ' $newfile | Set-Content $file

PowerShell Get-ContentとForEachの操作:最終的な考え

PowerShell Get-ContentとForEachの操作:最終的な考え

このガイドで共有されているトピックは、特にPowerShell ForEachの3つのバリアントをカバーしているため、混乱を招く可能性があります。わかりやすくするために、この記事で共有されている概念をまとめた表を次に示します。

質問ForEachステートメントForEachメソッドForEach-オブジェクトコマンドレット
Get-Contentからの入力を受け入れます✓✓✓✓✓✓
Get-Contentからの入力をどのように受け入れますか?パイプライン|、またはForEachステートメント条件ブロック内PowerShellメソッド。()パイプライン|または経由 InputObject パラメータ
Get-Contentからの入力をどのように変換しますか?コレクション内の各オブジェクトを表す時間変数を作成しますコレクション内の各オブジェクトをPowerShell自動パイプライン変数$ _で表しますコレクション内の各オブジェクトをPowerShell自動パイプライン変数$ _で表します
サンプルスクリプト?ForEach(Get-Content D: PS-Tutorial list.txtの$ filename)Out-Null
(Get-Content D: PS-Tutorial list.txt).ForEach(
New-Item -Path D: PS-Tutorial -Name $ _ -ItemType Directory
)。
Get-Content D: PS-Tutorial list.txt | ForEach-Object
New-Item -Path D: PS-Tutorial -Name $ _ -ItemType Directory

これで、PowerShellGet-ContentとForEachの使用方法に関する最新ガイドが完成しました。お役に立てば幸いです。

役に立ったと思ったら、親切に投票してください はい この投稿は以下の役立つ質問でした。

または、このページの最後にある[返信を残す]フォームを使用して、質問したり、コメントを残したり、フィードバックを提供したりすることもできます。

最後に、PowerShell tech Sゾーンの詳細については、WindowsPowerShellハウツーガイドページにアクセスしてください。また、ホームページからの作業が非常に役立つ場合があります。

参考文献と参考資料

  1. ForEach-Object
  2. Get-Content
  3. about_Foreach