Windowsの自動化やサーバ運用で大活躍するPowerShell。
「使い始めたいけど、基本構文がよく分からない…」という人向けに、この記事ではPowerShellの基礎構文を一気に整理します。
以下の内容を押さえることで、シンプルなスクリプトはすぐ書けるレベルになります。
✅ PowerShellスクリプトの基本ルール
| 内容 | 説明 |
| 拡張子 | .ps1 |
| コメント | # コメント |
| 大文字小文字 | 区別しない (例: $Value と $value は同じ) |
| 変数宣言 | $変数名 = 値 |
| 実行ポリシー変更 | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
💡 セキュリティのため、実行ポリシー設定は理解したうえで操作しましょう。
🧮 変数の基本
ポイント
🔁 配列(リスト)
📦 ハッシュテーブル(連想配列)
✅ 条件分岐(If / ElseIf / Else)
よく使う比較演算子
| 演算子 | 意味 |
| -eq | 等しい |
| -ne | 等しくない |
| -gt | より大きい |
| -lt | より小さい |
| -ge | 以上 |
| -le | 以下 |
🔁 ループ制御
for文
foreach文
🔄 while / do-while
📦 関数の定義
📎 パイプラインとフィルタ
| コマンド | 説明 |
| Get-Process | プロセス一覧取得 |
| Where-Object | 条件絞り込み |
| Sort-Object | 並び替え |
| Select-Object | 指定列のみ取得 |
💡 実用例:ファイル一覧を取得して出力
🎯 まとめ
PowerShellの基本構文は次の通り:
まずは小さな処理から試し、Windows作業をどんどん自動化していきましょう!
❓ よくある質問(FAQ)
Q. PowerShell ISEとWindows Terminalどっち使うべき?
A. 基本は Windows Terminal + VS Code を推奨。補完機能が強いです。
Q. 管理者権限はいつ必要?
A. ファイル操作・レジストリ操作・サービス制御等で必要になります。
PowerShellでのテキスト処理で、もっと効率良く抽出・置換したいと思ったことはありませんか?
そんなときに威力を発揮するのが**正規表現(Regex)**です。
ログ解析、ファイル名整形、データ抽出、フォーマット変換など、
業務効率が劇的に変わる超重要スキルです。
本記事では、PowerShell × 正規表現の基本から実務で使えるテクニックまで徹底解説します。
✅ 正規表現の基本:PowerShellでの使い方
マッチ判定 -match
否定パターン
文字列からValue取得
$matches[1] にキャプチャした文字列が入る
✅ よく使う正規表現パターン
| 用途 | パターン | 例 |
| 数字 | \d+ | 1234 |
| 英字 | [A-Za-z]+ | UserName |
| メール | \w+@\w+\.\w+ | test@mail.com |
| 日付 | \d{4}/\d{2}/\d{2} | 2025/01/10 |
| 任意の文字列 | .*? | 全部 |
✅ 実践例:ログからIPアドレスだけ抽出
出力
✅ 置換:-replaceでデータ整形
電話番号のハイフン削除
メールのドメインを隠す
✅ ファイル名の一括リネーム
大量ファイルの命名変換で超便利
✅ キャプチャした値を使った置換
日付フォーマット変換(YYYY/MM/DD → YYYY-MM-DD)
✅ 否定・条件抽出の例
IP行だけ抽出
エラー行だけ取得
“Warning”を含まない行
✅ 欲しいパターンはGitHub Copilotじゃなく、正規表現辞書を使え!
以下のキーワードで検索すると精度高い例が見つかります👇
✅ まとめ
| 機能 | PowerShellでのコマンド |
| マッチ判定 | -match / -notmatch |
| 抽出 | $matches[] |
| 検索 | Select-String |
| 置換 | -replace |
| ファイル検索 | Get-ChildItem + Select-String |
正規表現を使いこなすと、
データ処理・ログ解析・自動化スクリプトが一気にプロレベルになります。
システム運用や開発現場では、ログ収集やバックアップ作業を「手動で行う」ケースがまだ多く残っています。しかし、PowerShellを使えばこれらを自動化し、毎日の定型作業を一気に効率化できます。
この記事では、**「ログを自動収集してバックアップするPowerShellスクリプト」**を実例付きで紹介します。
スクリプトはWindows環境でそのまま動作し、日次・週次の定期ジョブとしても活用可能です。
⚙️ 実践スクリプト:ログ収集&バックアップ自動化
以下のスクリプトは、
📦 処理の流れ
| 処理 | 内容 |
| ① 初期設定 | ログフォルダ・バックアップフォルダ・保持日数を設定 |
| ② 日付フォルダ作成 | yyyyMMdd形式で新しいバックアップフォルダを作成 |
| ③ ログコピー | 対象フォルダからすべての.logファイルをコピー |
| ④ 古いフォルダ削除 | 30日より古いフォルダを自動削除 |
🕒 定期実行する方法(Windows タスクスケジューラ)
-
Windows検索バーで「タスクスケジューラ」と入力して起動
-
「基本タスクの作成」→ タスク名を「ログバックアップ」とする
-
「毎日」または「毎週」を選択
-
「操作」で「プログラムの開始」を選択し、以下を指定
-
完了後、右クリック → 「プロパティ」 → 「最上位の特権で実行する」を有効にする
💡 応用ポイント
-
ZIP圧縮も追加可能:Compress-Archiveを使ってバックアップサイズを削減
-
ログローテーション:ファイルサイズや日付で自動的にローテーションするよう拡張可能
-
メール通知:バックアップ完了後にSend-MailMessageで報告を送信可能
-
CSVやJSON対応:ログ形式が異なる場合もGet-Content+ConvertFrom-Jsonなどで加工可能
🚀 まとめ
PowerShellを使えば、GUI操作では面倒なログバックアップを簡潔に自動化できます。
1日1回の定期タスクに登録するだけで、手動の手間を大幅削減。
運用の安定化にもつながります。
ポイント:小さなスクリプトでも「業務時間を削減」できるのがPowerShellの強みです。
PowerShell でスクリプトを実行しようとすると
「このシステムではスクリプトは実行できません」
といった権限エラーが出ることがあります。
原因は ExecutionPolicy(実行ポリシー) の設定にあります。
この記事では、
を解説します。
Get-ExecutionPolicy -List で分かること
Get-ExecutionPolicy -List を実行すると、スコープごとの設定が一覧表示されます。
例: 
各スコープの意味
-
MachinePolicy
グループポリシーでコンピュータ全体に適用される設定。通常の環境では Undefined が多い。
-
UserPolicy
グループポリシーでユーザー単位に適用される設定。これも Undefined が一般的。
-
Process
現在の PowerShell プロセス(セッション)だけに適用される一時設定。
終了するとリセットされる。
-
CurrentUser
現在ログインしているユーザーだけに適用される設定。
管理者権限なしで変更可能なので、初心者はここを設定するのが安全。
-
LocalMachine
コンピュータ全体に適用される設定。管理者権限が必要。
ExecutionPolicy の種類
設定できる実行ポリシーには以下の種類があります。
| Policy | 概要 | 署名の要否 | 典型用途 | リスク度(1-5) | 推奨スコープ | 設定例(Set-ExecutionPolicy) | 補足 |
| Restricted | スクリプト実行を全て禁止 | 不要(そもそも実行不可) | 企業の厳格端末/検証用の完全遮断 | 2 | LocalMachine | Set-ExecutionPolicy Restricted -Scope LocalMachine | 既定値になりがち。学習/自動化には不向き |
| AllSigned | 信頼された発行元の署名付きのみ実行可 | 必須(すべて) | 厳格な本番環境での運用 | 3 | LocalMachine または CurrentUser | Set-ExecutionPolicy AllSigned -Scope CurrentUser | 署名管理が前提。外部スクリプトの安全性担保 |
| RemoteSigned | ローカル作成は実行可/インターネット由来は署名必須 | リモート(ダウンロード物)のみ必須 | 一般的な開発/運用でのバランス設定 | 2 | CurrentUser(推奨) | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser | 最も無難。管理者権限不要でユーザー単位に適用 |
| Unrestricted | 全て実行可(初回に警告が出る場合あり) | 不要 | 検証/一時的な作業で制限を緩めたい時 | 4 | Process または CurrentUser | Set-ExecutionPolicy Unrestricted -Scope Process | 恒常運用は非推奨。警告は出るが実行は可能 |
| Bypass | ブロック/警告なしで全て実行 | 不要 | 自動化ジョブ/一時的に完全無視したい時 | 5 | Process(強く推奨) | Set-ExecutionPolicy Bypass -Scope Process | セッション限定で使う。恒常設定は危険 |
| Undefined | スコープに設定なし(上位スコープへ委譲) | — | ポリシー未設定状態の表示 | 1 | — | — | 全スコープUndefinedの場合は実質Restrictedが有効になることが多い |
安全に設定する方法
権限エラーを解決するには、スコープを指定して設定します。
現在のユーザーだけに設定する場合(推奨)
-
管理者権限が不要
-
他のユーザーやシステム全体には影響しない
-
ローカルで作ったスクリプトは実行可能
一時的に設定する場合(PowerShellを閉じるとリセット)
まとめ
-
ExecutionPolicy が原因で PowerShell スクリプトが実行できないことがある
-
Get-ExecutionPolicy -List でどのスコープに設定があるかを確認できる
-
初心者は CurrentUser に RemoteSigned を設定するのが安全
-
目的に応じて、Process(一時的)や LocalMachine(管理者権限が必要)も使える
テキストファイルを処理して「特定の行だけ抜き出したい」という場面は、ログ解析やデータ処理を行う際によくあります。PowerShellを使えば、シンプルなコマンドで効率的に抽出可能です。本記事では、PowerShellによる代表的な方法を解説します。
基本的な考え方
PowerShellでは、Get-Content コマンドレットでテキストファイルを1行ずつ取得できます。そこから条件を指定して、欲しい行をフィルタリングすれば目的の行を抽出できます。
方法1:行番号で抽出する
特定の行番号を指定して抽出するには配列インデックスを利用します。PowerShellは0から数えるので注意しましょう。
複数行をまとめて取得することも可能です。
方法2:条件で抽出する(文字列検索)
キーワードを含む行だけを抽出するには Select-String を使います。
この場合、ヒットした行番号と内容が出力されます。内容だけ欲しい場合は以下のように書けます。
方法3:正規表現で抽出する
複雑な条件にマッチさせたい場合は正規表現を活用できます。
方法4:範囲指定で抽出する
特定の行範囲を取り出したい場合は Select-Object を利用します。
まとめ
-
行番号で取得 → 配列インデックス
-
キーワードで取得 → Select-String
-
複雑条件 → 正規表現
-
範囲指定 → Select-Object
PowerShellを使えば、テキストファイルの解析や必要な行だけの抽出を簡単に自動化できます。ログファイル処理やデータ前処理など、日々の作業効率化にぜひ活用してみてください。
Windows環境でフォルダ内のファイル一覧を取得したい場面は多々あります。例えば、定期的なファイル管理や監査用の記録、またはバックアップ作業のために一覧をエクスポートしたい場合です。
PowerShellを使えば、簡単にフォルダ内のファイル一覧を取得し、そのままCSV形式で保存することができます。
この記事では、PowerShellでフォルダ内のファイル一覧を取得し、CSVに出力する方法を解説します。
基本コマンド
まずは基本となるコマンドです。
以下の例では、C:\Test フォルダ内のファイル一覧を取得し、filelist.csv に出力します。
各コマンドの意味
-
Get-ChildItem "C:\Test"
指定フォルダ内のファイルやフォルダを取得します。gci や dir と省略可能。
-
Export-Csv
取得結果をCSVに変換して保存します。
-
-NoTypeInformation
CSVの先頭に不要な型情報行を出力しないようにします。
-
-Encoding UTF8
CSVファイルの文字コードをUTF-8に指定します(文字化け防止)。
ファイルのみ取得する場合
フォルダ名は不要で、ファイルだけを取得したい場合は -File オプションを指定します。
サブフォルダも含めて取得する場合
サブフォルダ内のファイルもまとめて一覧化するには -Recurse を付けます。
|
|
Get-ChildItem "C:\Test" -File -Recurse | Export-Csv -Path "C:\Test\filelist_all.csv" -NoTypeInformation -Encoding UTF8 |
出力内容を絞り込む
CSVに出力する項目を指定することも可能です。例えば、フルパス、サイズ、更新日時 だけを出力する場合:
実行例イメージ
出力されるCSVファイルをExcelで開くと、以下のように一覧が表示されます。
| FullName |
Length |
LastWriteTime |
| C:\Test\document1.txt |
1234 |
2025/09/17 10:30:00 |
| C:\Test\image.png |
45678 |
2025/09/16 15:20:00 |
| C:\Test\subfolder\report.docx |
9876 |
2025/09/15 09:10:00 |
まとめ
-
Get-ChildItem でフォルダ内のファイル一覧を取得できる
-
Export-Csv を組み合わせることで、簡単にCSVへ出力可能
-
-File、-Recurse、Select-Object を使えば用途に合わせて柔軟に一覧化できる
PowerShellを使えば、手作業でリスト化する手間を省き、自動化できるのでぜひ活用してみてください。
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。