Process付きスクリプトブロックを再帰処理する例を示します。ここでは、ディレクトリ構造を再帰的に処理して、各ファイルの情報を取得するシナリオを考えます。
このスクリプトは、指定されたディレクトリ内のすべてのファイルを再帰的に処理し、各ファイルのフルパスを出力します。
まず、再帰的にファイルを処理するための関数を定義します。
function Get-FileInformation {
param (
[string]$Path
)
# 指定されたパスのファイル情報を取得
if (Test-Path $Path -PathType Container) {
Get-ChildItem -Path $Path | ForEach-Object {
# ディレクトリの場合、再帰的にこの関数を呼び出す
Get-FileInformation -Path $_.FullName
}
} else {
# ファイルの場合、ファイルのフルパスを出力
$_.FullName
}
}
次に、再帰処理を行うためのProcess付きスクリプトブロックを定義します。
$scriptblock = {
process {
param ($item)
Get-FileInformation -Path $item
}
}
最後に、指定されたディレクトリ内のすべてのファイルとディレクトリをパイプラインで処理します。
# 開始ディレクトリのパス
$startPath = "C:\\\\example\\\\directory"
# 再帰処理の実行
Get-ChildItem -Path $startPath -Recurse -Directory | ForEach-Object -Process $scriptblock
上記のすべての部分を組み合わせると、再帰的にディレクトリ内のファイルを処理する完全なスクリプトが完成します。
function Get-FileInformation {
param (
[string]$Path
)
# 指定されたパスのファイル情報を取得
if (Test-Path $Path -PathType Container) {
Get-ChildItem -Path $Path | ForEach-Object {
# ディレクトリの場合、再帰的にこの関数を呼び出す
Get-FileInformation -Path $_.FullName
}
} else {
# ファイルの場合、ファイルのフルパスを出力
$_.FullName
}
}
$scriptblock = {
process {
param ($item)
Get-FileInformation -Path $item
}
}
# 開始ディレクトリのパス
$startPath = "C:\\\\example\\\\directory"
# 再帰処理の実行
Get-ChildItem -Path $startPath -Recurse -Directory | ForEach-Object -Process $scriptblock
Get-FileInformation
関数は、指定されたパスがディレクトリかファイルかを確認し、ディレクトリの場合は再帰的に自身を呼び出します。Process
ブロック付きのスクリプトブロックは、パイプラインから渡される各アイテム(ディレクトリ)に対して Get-FileInformation
関数を呼び出します。