「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を使えば、手作業でリスト化する手間を省き、自動化できるのでぜひ活用してみてください。