
※本記事にはアフィリエイト広告(プロモーション)が含まれています

PCパーツ・ガジェット専門
自作PCパーツやガジェットの最新情報を発信中。実測データに基づいた公平なランキングをお届けします。
PowerShellの自動化は、まずファイル一覧をCSVへ出す小さな処理から始めます。コピーを追加する際は対象を明示し、上書き防止とWhatIfで確認してから実行します。手動実行が通ったあとに、同じエンジン・権限・パスで定期実行を設定してください。
自動化スクリプトを作成・実行する前に、現在使用しているPowerShellのバージョンを確認してください。Windowsには、標準のWindows PowerShell 5.1(powershell.exe)と、より新しいPowerShell 7(pwsh.exe)の2種類が存在します。これらは別個のプログラムとして動作するため、スクリプトがどちらのエンジンで動いているかを把握しておくことが重要です。
以下のコマンドを実行することで、現在のバージョン情報を確認できます。
$PSVersionTable
自動化したい内容に応じて、適切な手法を選択してください。
| 用途 | 主な手法 | 期待される結果 |
|---|---|---|
| ファイル一覧の作成 | Get-ChildItem + Export-Csv | ファイル名、サイズ、更新日時を含むCSVリストの生成 |
| ファイルのコピー | Copy-Item | 指定した場所への安全なファイルの複製 |
| 定期的な自動実行 | タスクスケジューラ | スクリプトの定期的・自動的な実行 |
編集部の判断として、ファイル操作において最初は変更・削除を伴う処理を避け、一覧CSVで対象と結果を確認することを勧めます。なお、自動化による効率化については、読者自身で実測時間を比較し、保守コストを含めた判断を行ってください。
大量のファイルを管理する場合、まずはファイルの一覧をCSV形式で出力し、現在の状況を正確に把握できるようにします。
作業を開始する前に、出力先のパスを確認してください。出力ファイルが既存のファイルを上書きしてしまう可能性があるため、出力先には注意が必要です。
以下の手順で、ドキュメントフォルダ内のファイル情報をCSVとして保存します。
# パスの設定
$source = [Environment]::GetFolderPath("MyDocuments")
$report = Join-Path $env:TEMP file-list.csv
# ファイル一覧の取得とCSV出力
Get-ChildItem -LiteralPath $source -File | Select-Object Name, Length, LastWriteTime | Export-Csv -LiteralPath $report -NoTypeInformation -Encoding utf8 -NoClobber -ErrorAction Stop
-NoClobberは既存のCSVを上書きしない指定です。既に同名ファイルがある場合は、出力先を変えるか、その内容を確認して扱いを決めます。出典:MicrosoftのExport-Csv公式ドキュメント。
このコマンドの構成は以下の通りです。
Get-ChildItem -LiteralPath $source -File: 指定したソースパス(ドキュメントフォルダ)から、ファイルのみを取得します。Select-Object Name, Length, LastWriteTime: ファイル名、サイズ、最終更新日時のみを抽出します。Export-Csv -LiteralPath $report -NoTypeInformation -Encoding utf8: 抽出した情報を、指定したレポート用パスへCSV形式で出力します。ファイルをコピーする際は、誤操作を防ぐための「シミュレーション(ドライラン)」と「エラーハンドリング」が極めて重要です。
コピーを実行する前に、対象のファイルが存在するかどうかを Test-Path コマンドで確認してください。また、予期せぬ事態に備え、実行前には必ずバックアップを取得しておくことを推奨します。
Copy-Item コマンドには、実際に処理を行わずに実行内容を確認できる -WhatIf パラメータがあります。
# テスト用フォルダー内の一ファイルを指定します
$sourceFile = "C:\AutomationTest\input\sample.txt"
$destinationFile = "C:\AutomationTest\output\sample-copy.txt"
if (-not (Test-Path -LiteralPath $sourceFile -PathType Leaf)) {
throw "コピー元ファイルが見つかりません"
}
if (-not (Test-Path -LiteralPath "C:\AutomationTest\output" -PathType Container)) {
throw "出力フォルダーを先に用意してください"
}
if (Test-Path -LiteralPath $destinationFile) {
throw "コピー先が既に存在します"
}
Copy-Item -LiteralPath $sourceFile -Destination $destinationFile -WhatIf
-WhatIf は、Copy-Item を含む特定のコマンドレット(cmdlet)で使用可能です。自作の関数内で同様のシミュレーション動作を実現したい場合は、SupportsShouldProcessと、変更処理を囲むShouldProcessの実装が必要です。指定を追加するだけで、全処理が自動的に保護されるわけではありません。出典:Microsoft公式ガイドのShouldProcess。
次は、上のテスト用パスと存在確認を済ませ、WhatIfの対象を確認したあとに行う実コピーの例です。実行中にほかの処理が同じ出力先へ書く状況は避けてください。出典:Copy-Item公式ドキュメント。
スクリプトの実行中にエラーが発生した場合に備え、try/catch 構文と -ErrorAction Stop を組み合わせて使用します。これにより、エラーが発生した瞬間に処理を中断し、エラー内容を捕捉できます。
try {
# コピー処理(エラー発生時に中断するように設定)
if (Test-Path -LiteralPath $destinationFile) {
throw "コピー先が既に存在します"
}
Copy-Item -LiteralPath $sourceFile -Destination $destinationFile -ErrorAction Stop
# 実行ステータスの記録
Write-Output "Success"
} catch {
# エラー内容の記録(機密情報を含まないよう注意)
Write-Error "コピーに失敗しました。後続の処理を停止します。"
exit 1
}
スクリプトが手動で正常に動作することを確認したら、Windowsのタスクスケジューラを使用して定期実行の設定を行います。
タスクスケジューラでスクリプトを自動実行させる際は、以下の項目が手動実行時と一致していることを必ず確認してください。
タスクの「操作」設定において、スクリプトを安定して実行するために以下の引数を使用することが推奨されます。
-NoProfile: プロファイル(設定ファイル)を読み込まずに実行します。これにより、環境の違いによる影響を抑え、実行速度と安定性を向上させます。-File: 実行するスクリプトファイルを指定します。注意: -ExecutionPolicy Bypass を使用して実行ポリシーを回避する方法は、セキュリティの観点から推奨されません。
出典:Microsoft公式のタスクスケジューラ案内。PowerShell 5.1系のScheduled Jobsと、任意のスクリプトを登録するTask Schedulerは区別します。
編集部では、タスクを登録しただけで完了とせず、実行時刻・終了状態・出力ファイルの内容を確認することを勧めます。タスクが重複起動しない設定を選び、止める場合はタスクスケジューラで対象タスクを無効化します。
| 状態 | 確認すること | 対処 |
|---|---|---|
| 手動でも失敗 | パスと入力・エンジン | 定期実行へ進まず修正 |
| タスクだけ失敗 | アカウント・作業フォルダー | 手動実行との条件を比較 |
| CSVが上書き拒否 | 同名ファイル | 内容を確認し別出力先を選ぶ |
| コピー先が存在 | 再実行や重複起動 | 勝手に上書きせず停止 |
| 出力が空 | 入力フォルダーと対象条件 | 実際の入力を確認 |
| 終了状態は成功 | 出力内容と対象件数 | 処理の目的を満たすか確認 |
タスクスケジューラでスクリプトを実行する際、相対パスを使用するとファイルの読み込みに失敗する原因となります。必ず絶対パスを使用してください。
Windows PowerShell 5.1 と PowerShell 7 では、使用できるコマンドや挙動が異なる場合があります。実行環境のバージョンを $PSVersionTable で事前に確認してください。
スクリプトがアクセスできないファイルやフォルダがある場合、エラーが発生します。実行アカウントに適切な権限が付与されているか確認してください。
$PSVersionTable コマンドを実行することで、現在のバージョンを確認できます。
Copy-Item コマンドに -WhatIf パラメータを付けて実行してください。これにより、実際のコピーは行われず、実行される予定の操作内容が表示されます。
スクリプトの絶対パス、作業ディレクトリ、および実行アカウントの権限が正しく設定されているかを確認してください。
try/catch 構文を使用し、コマンドに -ErrorAction Stop を指定することで、エラーを捕捉して処理を制御できます。
出力先のパス($report)が既存のファイルと重複していないか、実行前に必ず確認してください。
関連情報:
参考文献:

オフィス向けPC
非エンジニアのClaude Cowork仕事術: Skills・Dispatch・Scheduled Tasksから業務自動化まで実践ガイド
その他
今すぐ使えるかんたん Windows 11 完全ガイドブック 困った解決&便利技 Copilot対応 [改訂第4版]

メモリ
Excelマクロで挫折した人のための「GAS×AI」超入門: 毎月のコピペ地獄をワンクリックで終わらせる全自動化セットアップ

OSソフト
今すぐ使えるかんたん Windows 11 2025年最新版 Copilot対応

書籍
Obsidian×AI 自動化の教科書: CursorやClaude Codeでメモを資産に! ChatGPT・Gemini連携で新時代の情報管理術

書籍
事例で学ぶフォルダ管理の教科書 パソコンのデータ整理を物語形式で完全解説!業務効率化の基礎知識: 元外資系マネージャーの解説ではじめてでもよく分かる!フォルダ構成 管理ルール 導入プロセス ビジネス思考

PowerShellを使ったWindows管理の自動化を解説。スクリプト基礎、ファイル操作、システム管理、タスクスケジューラ連携を紹介。

PowerShell 7のスクリプティングを基礎から実践まで解説。変数・制御構文・関数からAPI呼び出し、タスク自動化まで、Windows/macOS/Linux対応のクロスプラットフォームガイド。

Windowsバッチスクリプト(.bat/.cmd)による日常タスク自動化ガイド。基本構文からタスクスケジューラ連携、実践的な自動化スクリプト例まで解説。
この記事で紹介したノートパソコンの商品情報をAmazonで確認できます。
Q: さらに詳しい情報はどこで?
A: 自作.comコミュニティで質問してみましょう。