これまで学んだPowerShellの機能を組み合わせて実際に使える業務自動化スクリプトを3本作ります。
実践1:差分バックアップスクリプト
function Start-Backup {
param(
[Parameter(Mandatory)][string]$Source,
[string]$Dest = "D:\Backup"
)
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$target = Join-Path $Dest $date
New-Item -Path $target -ItemType Directory -Force | Out-Null
$files = Get-ChildItem $Source -Recurse -File
$count = 0
foreach ($file in $files) {
$rel = $file.FullName.Substring($Source.Length)
$dest = Join-Path $target $rel
$dir = Split-Path $dest
if (-not (Test-Path $dir)) { New-Item $dir -ItemType Directory -Force | Out-Null }
Copy-Item $file.FullName $dest
$count++
}
Write-Host "$count 件バックアップ完了 → $target"
Add-Content "backup.log" "$(Get-Date): $count件 → $target"
}
Start-Backup -Source "C:\Work"実践2:システム情報レポートの自動生成
function New-SystemReport {
$report = [PSCustomObject]@{
取得日時 = Get-Date
コンピューター名 = $env:COMPUTERNAME
OS = (Get-CimInstance Win32_OperatingSystem).Caption
OSバージョン = (Get-CimInstance Win32_OperatingSystem).Version
CPU = (Get-CimInstance Win32_Processor).Name
総メモリ = "{0:N1} GB" -f ((Get-CimInstance Win32_ComputerSystem).TotalPhysicalMemory / 1GB)
空きメモリ = "{0:N1} GB" -f ((Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1MB)
IPアドレス = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.InterfaceAlias -notlike "*Loopback*" }).IPAddress -join ", "
}
$report | Format-List
$report | Export-Csv "system_report_$(Get-Date -Format yyyyMMdd).csv" -NoTypeInformation -Encoding UTF8
Write-Host "レポートを保存しました"
}
New-SystemReportまとめ
- 関数化することで引数を変えるだけで再利用できる
- PSCustomObjectで構造化データを作りExport-Csvで出力できる
- Get-CimInstanceでハードウェア情報を取得できる



コメント