実践編:ファイル操作とテキスト処理
プロバイダモデルを通じたファイルシステムの基本操作、ファイルの読み書き、正規表現を用いたテキスト検索、および JSON や CSV の変換処理を解説します。
プロバイダモデルとファイルシステム操作
PowerShell では「プロバイダ」という仕組みにより、通常のファイルシステムだけでなく、レジストリや環境変数もドライブ(仮想ドライブ)のように同じコマンドで操作できます。
Get-PSDrive を実行すると、利用可能なドライブ一覧(C:, Env:, Variable:, HKCU: 等)が表示されます。
» ファイル・ディレクトリの主要コマンド
| 操作 | コマンドレット | 例 |
|---|---|---|
| 存在確認 | Test-Path | Test-Path -Path "./config.json" |
| 新規作成 | New-Item | New-Item -ItemType Directory -Path "./logs" |
| 一覧取得 | Get-ChildItem | Get-ChildItem -Path "./src" -Recurse |
| コピー | Copy-Item | Copy-Item -Path "a.txt" -Destination "b.txt" |
| 移動 | Move-Item | Move-Item -Path "old.txt" -Destination "./archive/" |
| 削除 | Remove-Item | Remove-Item -Path "./temp" -Recurse -Force |
» パスの安全な操作(Join-Path と Split-Path)
文字列の結合ではなく専用のコマンドレットを使うことで、OS の区切り文字(/ や \)の違いを気にせず安全にパスを扱えます。
# パスの結合
$targetFile = Join-Path -Path "C:\workspace" -ChildPath "data\result.txt"
# ファイル名や親ディレクトリの抽出
$parentDir = Split-Path -Path $targetFile -Parent
$fileName = Split-Path -Path $targetFile -Leaf
ファイルの読み込みと書き込み
テキストファイルの効率的な読み書き方法です。
» ファイルの読み込み(Get-Content)
ファイルの内容を1行ずつの配列として読み込みます。
# 全体を読み込む
$lines = Get-Content -Path "./sample.txt"
# ログファイルの末尾10行をリアルタイム監視する(Unix の tail -f に相当)
Get-Content -Path "./access.log" -Tail 10 -Wait
» ファイルへの書き込み(Set-Content と Add-Content)
新規書き込み(上書き)には Set-Content、追記には Add-Content を使用します。PowerShell 7 では既定の文字コードが BOM なしの UTF-8(utf8NoBOM)です。
# 新規作成または上書き
Set-Content -Path "./output.txt" -Value "First line"
# 末尾に追記
Add-Content -Path "./output.txt" -Value "Second line"
テキスト検索と正規表現
テキストデータから目的のパターンを抽出する手法です。
» Select-String(テキスト検索)
Unix の grep コマンドに相当し、ファイル内やパイプライン入力から正規表現パターンを検索します。
# ログファイルから ERROR または WARN を含む行を検索
Select-String -Path "./logs/*.log" -Pattern "(ERROR|WARN)"
» -match 演算子と自動変数 $Matches
正規表現で一致判定を行い、キャプチャした文字列を $Matches 変数から取得します。
$line = "2026-09-27 15:30:00 [INFO] Task completed in 420ms"
if ($line -match "Task completed in (?<duration>\d+)ms") {
$time = $Matches["duration"]
Write-Output "Duration: $time ms"
}
構造化データ(JSON と CSV)の処理
Web API や設定ファイルで多用されるデータ形式の相互変換です。
» JSON の相互変換
ConvertFrom-Json は JSON 文字列をカスタムオブジェクトに変換し、ConvertTo-Json はオブジェクトを JSON 文字列にシリアライズします。
# JSON 文字列からオブジェクトへの変換
$jsonText = '{"name": "AppServer", "port": 8080}'
$obj = $jsonText | ConvertFrom-Json
Write-Output $obj.name
# オブジェクトから JSON 文字列への変換(階層の深さは -Depth で指定)
$jsonOutput = $obj | ConvertTo-Json -Depth 5
» CSV の相互変換
表形式データを手軽にインポート・エクスポートできます。
# CSV ファイルの読み込み
$servers = Import-Csv -Path "./servers.csv"
# オブジェクト一覧を CSV として保存
Get-Process | Select-Object -Property Id, Name, WorkingSet64 |
Export-Csv -Path "./process_list.csv" -NoTypeInformation -Encoding utf8