Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

実践編:ファイル操作とテキスト処理

プロバイダモデルを通じたファイルシステムの基本操作、ファイルの読み書き、正規表現を用いたテキスト検索、および JSON や CSV の変換処理を解説します。

プロバイダモデルとファイルシステム操作

PowerShell では「プロバイダ」という仕組みにより、通常のファイルシステムだけでなく、レジストリや環境変数もドライブ(仮想ドライブ)のように同じコマンドで操作できます。

Get-PSDrive を実行すると、利用可能なドライブ一覧(C:, Env:, Variable:, HKCU: 等)が表示されます。

» ファイル・ディレクトリの主要コマンド

操作コマンドレット例
存在確認Test-PathTest-Path -Path "./config.json"
新規作成New-ItemNew-Item -ItemType Directory -Path "./logs"
一覧取得Get-ChildItemGet-ChildItem -Path "./src" -Recurse
コピーCopy-ItemCopy-Item -Path "a.txt" -Destination "b.txt"
移動Move-ItemMove-Item -Path "old.txt" -Destination "./archive/"
削除Remove-ItemRemove-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