「PowerShell」タグアーカイブ

PowerShellスクリプトの基本構文まとめ:変数・条件分岐・ループを完全マスター

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の基本構文は次の通り:

  • ✅ 変数 $var = 値

  • ✅ 条件分岐 if () {}

  • ✅ ループ for / foreach / while

  • ✅ ハッシュテーブル @{ Name = "A" }

  • ✅ 関数 function X(){}

  • ✅ パイプライン |

まずは小さな処理から試し、Windows作業をどんどん自動化していきましょう!


❓ よくある質問(FAQ)

Q. PowerShell ISEとWindows Terminalどっち使うべき?
A. 基本は Windows Terminal + VS Code を推奨。補完機能が強いです。

Q. 管理者権限はいつ必要?
A. ファイル操作・レジストリ操作・サービス制御等で必要になります。

PowerShell正規表現攻略ガイド:文字列操作が劇的に速くなる実践技

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を使えばこれらを自動化し、毎日の定型作業を一気に効率化できます。

この記事では、**「ログを自動収集してバックアップするPowerShellスクリプト」**を実例付きで紹介します。
スクリプトはWindows環境でそのまま動作し、日次・週次の定期ジョブとしても活用可能です。


⚙️ 実践スクリプト:ログ収集&バックアップ自動化

以下のスクリプトは、

  • ログフォルダをスキャン

  • 日付別フォルダにコピー

  • 古いバックアップを自動削除
    する一連の処理を行います。


📦 処理の流れ

処理内容
① 初期設定ログフォルダ・バックアップフォルダ・保持日数を設定
② 日付フォルダ作成yyyyMMdd形式で新しいバックアップフォルダを作成
③ ログコピー対象フォルダからすべての.logファイルをコピー
④ 古いフォルダ削除30日より古いフォルダを自動削除

🕒 定期実行する方法(Windows タスクスケジューラ)

  1. Windows検索バーで「タスクスケジューラ」と入力して起動

  2. 「基本タスクの作成」→ タスク名を「ログバックアップ」とする

  3. 「毎日」または「毎週」を選択

  4. 「操作」で「プログラムの開始」を選択し、以下を指定

    Program/script: powershell.exe
    Add arguments: -File "D:\Scripts\log_backup.ps1"
  5. 完了後、右クリック → 「プロパティ」 → 「最上位の特権で実行する」を有効にする


💡 応用ポイント

  • ZIP圧縮も追加可能Compress-Archiveを使ってバックアップサイズを削減

  • ログローテーション:ファイルサイズや日付で自動的にローテーションするよう拡張可能

  • メール通知:バックアップ完了後にSend-MailMessageで報告を送信可能

  • CSVやJSON対応:ログ形式が異なる場合もGet-ContentConvertFrom-Jsonなどで加工可能


🚀 まとめ

PowerShellを使えば、GUI操作では面倒なログバックアップを簡潔に自動化できます。
1日1回の定期タスクに登録するだけで、手動の手間を大幅削減。
運用の安定化にもつながります。

ポイント:小さなスクリプトでも「業務時間を削減」できるのがPowerShellの強みです。

PowerShellスクリプトが権限エラーで実行できない!ExecutionPolicy設定で解決する方法

PowerShell でスクリプトを実行しようとすると
「このシステムではスクリプトは実行できません」
といった権限エラーが出ることがあります。

原因は ExecutionPolicy(実行ポリシー) の設定にあります。
この記事では、

  • Get-ExecutionPolicy -List で確認できる各項目の意味

  • 設定できる ExecutionPolicy の種類

  • 初心者でも安全にスクリプトを実行するための方法

を解説します。


Get-ExecutionPolicy -List で分かること

Get-ExecutionPolicy -List を実行すると、スコープごとの設定が一覧表示されます。

例:

各スコープの意味

  • MachinePolicy
    グループポリシーでコンピュータ全体に適用される設定。通常の環境では Undefined が多い。

  • UserPolicy
    グループポリシーでユーザー単位に適用される設定。これも Undefined が一般的。

  • Process
    現在の PowerShell プロセス(セッション)だけに適用される一時設定。
    終了するとリセットされる。

  • CurrentUser
    現在ログインしているユーザーだけに適用される設定。
    管理者権限なしで変更可能なので、初心者はここを設定するのが安全

  • LocalMachine
    コンピュータ全体に適用される設定。管理者権限が必要。


ExecutionPolicy の種類

設定できる実行ポリシーには以下の種類があります。

Policy概要署名の要否典型用途リスク度(1-5)推奨スコープ設定例(Set-ExecutionPolicy)補足
Restrictedスクリプト実行を全て禁止不要(そもそも実行不可)企業の厳格端末/検証用の完全遮断2LocalMachineSet-ExecutionPolicy Restricted -Scope LocalMachine既定値になりがち。学習/自動化には不向き
AllSigned信頼された発行元の署名付きのみ実行可必須(すべて)厳格な本番環境での運用3LocalMachine または CurrentUserSet-ExecutionPolicy AllSigned -Scope CurrentUser署名管理が前提。外部スクリプトの安全性担保
RemoteSignedローカル作成は実行可/インターネット由来は署名必須リモート(ダウンロード物)のみ必須一般的な開発/運用でのバランス設定2CurrentUser(推奨)Set-ExecutionPolicy RemoteSigned -Scope CurrentUser最も無難。管理者権限不要でユーザー単位に適用
Unrestricted全て実行可(初回に警告が出る場合あり)不要検証/一時的な作業で制限を緩めたい時4Process または CurrentUserSet-ExecutionPolicy Unrestricted -Scope Process恒常運用は非推奨。警告は出るが実行は可能
Bypassブロック/警告なしで全て実行不要自動化ジョブ/一時的に完全無視したい時5Process(強く推奨)Set-ExecutionPolicy Bypass -Scope Processセッション限定で使う。恒常設定は危険
Undefinedスコープに設定なし(上位スコープへ委譲)ポリシー未設定状態の表示1全スコープUndefinedの場合は実質Restrictedが有効になることが多い

 


安全に設定する方法

権限エラーを解決するには、スコープを指定して設定します。

現在のユーザーだけに設定する場合(推奨)

  • 管理者権限が不要

  • 他のユーザーやシステム全体には影響しない

  • ローカルで作ったスクリプトは実行可能

一時的に設定する場合(PowerShellを閉じるとリセット)


まとめ

  • ExecutionPolicy が原因で PowerShell スクリプトが実行できないことがある

  • Get-ExecutionPolicy -List でどのスコープに設定があるかを確認できる

  • 初心者は CurrentUser に RemoteSigned を設定するのが安全

  • 目的に応じて、Process(一時的)や LocalMachine(管理者権限が必要)も使える

PowerShellでテキストファイルから特定の行だけ抽出する方法

テキストファイルを処理して「特定の行だけ抜き出したい」という場面は、ログ解析やデータ処理を行う際によくあります。PowerShellを使えば、シンプルなコマンドで効率的に抽出可能です。本記事では、PowerShellによる代表的な方法を解説します。


基本的な考え方

PowerShellでは、Get-Content コマンドレットでテキストファイルを1行ずつ取得できます。そこから条件を指定して、欲しい行をフィルタリングすれば目的の行を抽出できます。


方法1:行番号で抽出する

特定の行番号を指定して抽出するには配列インデックスを利用します。PowerShellは0から数えるので注意しましょう。

複数行をまとめて取得することも可能です。


方法2:条件で抽出する(文字列検索)

キーワードを含む行だけを抽出するには Select-String を使います。

この場合、ヒットした行番号と内容が出力されます。内容だけ欲しい場合は以下のように書けます。

 

方法3:正規表現で抽出する

複雑な条件にマッチさせたい場合は正規表現を活用できます。


方法4:範囲指定で抽出する

特定の行範囲を取り出したい場合は Select-Object を利用します。


まとめ

  • 行番号で取得 → 配列インデックス

  • キーワードで取得Select-String

  • 複雑条件 → 正規表現

  • 範囲指定Select-Object

PowerShellを使えば、テキストファイルの解析や必要な行だけの抽出を簡単に自動化できます。ログファイル処理やデータ前処理など、日々の作業効率化にぜひ活用してみてください。

PowerShellでフォルダ内のファイル一覧を取得してCSVに出力する方法

Windows環境でフォルダ内のファイル一覧を取得したい場面は多々あります。例えば、定期的なファイル管理や監査用の記録、またはバックアップ作業のために一覧をエクスポートしたい場合です。
PowerShellを使えば、簡単にフォルダ内のファイル一覧を取得し、そのままCSV形式で保存することができます。

この記事では、PowerShellでフォルダ内のファイル一覧を取得し、CSVに出力する方法を解説します。


基本コマンド

まずは基本となるコマンドです。
以下の例では、C:\Test フォルダ内のファイル一覧を取得し、filelist.csv に出力します。

各コマンドの意味

  • Get-ChildItem "C:\Test"
    指定フォルダ内のファイルやフォルダを取得します。gcidir と省略可能。

  • Export-Csv
    取得結果をCSVに変換して保存します。

  • -NoTypeInformation
    CSVの先頭に不要な型情報行を出力しないようにします。

  • -Encoding UTF8
    CSVファイルの文字コードをUTF-8に指定します(文字化け防止)。


ファイルのみ取得する場合

フォルダ名は不要で、ファイルだけを取得したい場合は -File オプションを指定します。


サブフォルダも含めて取得する場合

サブフォルダ内のファイルもまとめて一覧化するには -Recurse を付けます。


出力内容を絞り込む

CSVに出力する項目を指定することも可能です。例えば、フルパス、サイズ、更新日時 だけを出力する場合:

これにより、余計な情報を省き、必要なデータだけを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-RecurseSelect-Object を使えば用途に合わせて柔軟に一覧化できる

PowerShellを使えば、手作業でリスト化する手間を省き、自動化できるのでぜひ活用してみてください。