WindowsPowerShell

実践!PowerShellで業務を自動化する【バックアップ・レポート・環境セットアップ】

WindowsPowerShell
記事内に広告が含まれています。

これまで学んだ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でハードウェア情報を取得できる

コメント

タイトルとURLをコピーしました