PowerShell スクリプトを実行する方法
Aug 25, 2025
PowerShell スクリプトは Windows、Linux、macOS 全体で管理タスクを自動化できますが、安全上の理由から、既定ではスクリプトの実行が制限されています。ユーザーは実行ポリシーを調整し、PowerShell または CMD を起動し、スクリプトのフルパスまたは相対パスを指定する必要があります。スクリプトにはパラメーターを含めることができ、高い権限で実行したり、次を使ってリモート実行したりすることも可能です。 Invoke-Command。ベストプラクティスには、スクリプトへの署名、最小権限の使用、入力の検証、そして安全な自動化のための Try-Catch によるエラー処理があります。
PowerShell は、タスク自動化と構成管理のために設計されたスクリプト言語およびコマンドラインシェルで、主にシステム管理者や上級ユーザーによって使用されます。.NET フレームワーク(PowerShell 7 では .Net Core)上に構築されており、Windows、Linux、macOS をサポートします。ユーザーアカウントの管理、ネットワークの設定、バックアップの実行などの管理タスクを自動化できるため、人為的なミスを減らせます。
PowerShell は管理を簡単にしてくれる一方で、特に初心者には課題が生じることがあります。よくある問題としては、構文ミス、設定ミスのあるパス、依存関係の問題、わかりにくいエラーメッセージなどがあります。さらにセキュリティを強化するために、スクリプトの実行は既定で制限されており、スクリプトを実行するには実行ポリシーを調整する必要があります。安全性を維持しながら PowerShell の可能性を最大限に活かすためには、スクリプトの取り扱いを慎重に行い、トラブルシューティングのスキルを組み合わせることが求められます。
厳選された関連コンテンツ:
PowerShell スクリプトを使う理由は?
PowerShell スクリプトは、Windows 環境だけでなくクロスプラットフォーム環境でも、システム管理者や開発者にとって欠かせない重要なツールです。アカウント管理、ネットワーク監視、ソフトウェア展開などのプロセスを自動化することで大幅な時間を節約でき、IT 専門家が戦略的な取り組み、ワークフローの最適化、問題解決に集中できるようになります。その結果、より高い効率とイノベーションを実現できます。スクリプトを自動実行するようにスケジュールすることも可能です。PowerShell Remoting は、集中型のインターフェイスから複数のシステムを安全にリモート管理できるようにすることで、PowerShell の価値をさらに高めます。物理的なアクセスの必要性を減らし、インシデントへの対応時間を向上させます。
PowerShell スクリプトを使うことで、複雑な操作を一貫して正確に実行できるようになります。人為的なミスをなくすことは、コンプライアンスやセキュリティの要件に従って統一された構成を維持するうえで不可欠です。この信頼性は、大規模な環境では特に重要です。わずかな不一致でも、脆弱性や運用上の失敗につながる可能性があるためです。
PowerShell の実行ポリシーを理解する
PowerShell は execution policies を使って、PowerShell スクリプトがシステム上で実行できるかどうか、また実行できる場合はどのような条件で実行されるかを制御します。
実行ポリシーの設定
実行ポリシーには、次の設定を指定できます。
- 制限付き:スクリプトは実行できません。PowerShell プロンプトでは個別のコマンドのみを実行できます。スクリプトを実行しようとすると、次のエラーメッセージが表示されます:「このシステムではスクリプトの実行が無効になっています。」これはほとんどのシステムにおける既定の設定です。
- AllSigned: 信頼できる発行元によって署名されたスクリプトのみを実行できます。この設定は、検証済みのスクリプトだけが実行されることを保証するため、高いレベルのセキュリティを提供します。
- RemoteSigned: ローカルで作成したスクリプトは署名なしで実行できますが、インターネットからダウンロードしたスクリプトは信頼できる発行元によって署名されている必要があります。このポリシーは日常的な用途でよく推奨されます。
- 制限なし: すべてのスクリプトは、その出所に関係なく、また署名の有無に関係なく実行できます。ただし、ユーザーがダウンロードしたスクリプトを実行するときは、リスクを知らせるための警告が表示されます。
次を使用して実行ポリシーを変更する方法: Set-ExecutionPolicy
実行ポリシーを変更するには、Set-ExecutionPolicy cmdlet を使用します。-Scope パラメーターはスコープを定義します:CurrentUser は現在ログインしているユーザーのみに適用され、LocalMachine はシステム上のすべてのユーザーに適用されます(この値を使用するには管理者権限が必要です)。
例を示します。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
プロンプトが表示されたら Y(はい)と入力して変更を確認します。
Get-ExecutionPolicy を使用して実行ポリシーを確認する
次のコマンドで現在の実行ポリシーを確認できます:
Get-ExecutionPolicy -List
以下はサンプル出力です:
PowerShell スクリプトを実行するためのステップバイステップ手順
PowerShell から PowerShell スクリプトを実行するには、次の手順に従ってください:
ステップ 1:PowerShell を起動する
スクリプトを実行する前に、PowerShell を開く必要があります。次の2つの方法があります:
- [スタート]メニューをクリックし、PowerShell と入力して、Windows PowerShell を選択します。
- [スタート]メニューで cmd と入力してコマンド プロンプトを起動します。powershell を入力して PowerShell セッションを開きます。
ステップ 2:スクリプトの場所へ移動する
次に、cd コマンドを実行して、.ps1 ファイルが保存されているディレクトリへ移動します:
cd C:\Users\AbbeyCrawford\Scripts
ステップ3:スクリプトを実行する
PowerShell スクリプトを実行するためのコマンドは、スクリプトが置かれているディレクトリにいるかどうかによって異なります:
- スクリプトが置かれているディレクトリにいる場合は、PowerShell でスクリプトを実行する方法は次のとおりです:
.\HelloWorld.ps1
- スクリプトのディレクトリにいない場合は、PowerShell スクリプトを実行するにはそのスクリプトのフルパスを指定する必要があります:
C:\Users\JohnDoe\Scripts\HelloWorld.ps1
- スクリプトが現在のディレクトリのサブフォルダーにある場合は、相対パスを指定するために .\ プレフィックスを使用してください:
.\SubFolder\HelloWorld.ps1
- パスの前にあるドット(.)は、実行後もその変数や関数が利用可能な状態のまま残るようにするため、現在のセッションでスクリプトを実行したいことを示します。(ドットソーシングについては、このドキュメントの後半で詳しく説明します。)2つのドットの間にスペースがある点に注意してください。
. .\HellowWorld.ps1
. C:\Scripts\MyScripts\HelloWorld.ps1
パラメーター付きでスクリプトを実行する
多くの PowerShell スクリプトは、より柔軟に使えるようにパラメーターを受け付けます。スクリプトを実行するときに、引数(arguments)を渡すことができます。
たとえば、次のように 2 つのパラメーターを受け付けるスクリプトがあるとします。Name と Age:
param(
[string]$Name,
[int]$Age
)
Write-Host "Hello, $Name! You are $Age years old."
When running the script, you can pass arguments to it as follows:
.\Get-UserInfo.ps1 -Name "John" -Age 30
CMD から PowerShell スクリプトを実行する方法
コマンド プロンプトから PowerShell スクリプトを実行するには、次の手順を実行します:
- 検索バーに cmd と入力して Enter を押します。
- 次のコマンドを使用して PowerShell スクリプトを実行します。-File オプションが必要です。実行するスクリプト ファイルを指定します。
powershell -File C:\Scripts\Get-UserInfo.ps1
-NoExit オプションの使用
場合によっては、スクリプトの実行が完了した後も PowerShell ウィンドウを開いたままにしたいことがあります。これは、デバッグに特に役立ちます。また、ウィンドウが閉じる前に確認したい出力をスクリプトが表示するように設計されている場合にも有用です。
コマンド プロンプトからスクリプトを実行する場合、PowerShell ウィンドウを開いたままにするには、以下の -NoExit オプションを使用します:
powershell -NoExit -File C:\Scripts\Backup.ps1
管理者として PowerShell を実行する方法
多くの管理タスクでは、正常に実行するために昇格した権限が必要です。たとえば、ソフトウェアのインストール、ネットワーク設定の変更、システム ディレクトリへのアクセスなどが挙げられます。管理者権限なしでこれらのタスクを実行しようとすると、エラーが発生することがあり、重要なメンテナンスや設定作業が妨げられる可能性があります。
管理者権限で PowerShell を実行するには、Windows PowerShell を右クリックし、Run as Administrator を選択します。
管理者権限で実行するための Start-Process の使い方
状況によっては、PowerShell セッション内から別の PowerShell のインスタンスやスクリプトを実行する必要があります。Start-Process の cmdlet は最適なツールです。-Verb RunAs パラメーターを追加すると、PowerShell が管理者権限で新しいインスタンスを起動するよう指示します:
Start-Process PowerShell -Verb RunAs
特定のスクリプトを昇格した権限で実行するには、-ArgumentList パラメーターを追加し、-File を使ってスクリプトのパスを指定します。以下に 2 つの例を示します:
Start-Process PowerShell -ArgumentList '-File "C:\Scripts\Update-Software.ps1"' -Verb RunAs
Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File “ C:\Scripts\Update-Software.ps1” -Verb RunAs
よくあるエラーとその対処方法
エラーのトラブルシューティングは最初は大変に思えるかもしれませんが、解決することは大きな一歩です。デバッグのスキルで金・銀・銅のバッジを獲得するようなものだと考えてください。以下に、最もよくある問題とそれらを効果的に解決する方法を示します。
「スクリプトの実行が無効になっています」というエラー
このエラーは、PowerShell の既定の実行ポリシーが Restricted に設定されているため、スクリプトが実行されないことが原因です。たとえば、以下のスクリーンショットでは次のエラーが示されています。「ファイル C:\Scripts\Get-UserInfo.ps1 は、このシステムではスクリプトの実行が無効になっているため読み込めません」:
この問題を解決するには、実行ポリシーを変更してスクリプトの実行を許可します。Set-ExecutionPolicy を使用して、RemoteSigned のような、より制限の少ない設定に変更します。
構文エラー
構文エラーは通常、コマンドの構造が不正確であること、パラメーターの欠落、またはタイプミスが原因で発生します。例を示します:
構文エラーを修正するには、表示されるエラーメッセージを注意深く読み、示されている行番号を確認して、どこでエラーが発生したかを特定します。エラーを防ぐために、スクリプトに一般的なミスがないか常に再確認し、構文ハイライトや IntelliSense 機能を提供するコードエディターの使用を検討してください。
権限エラー
権限エラーは、スクリプトが昇格した権限を必要とするリソースにアクセスしようとしたとき、またはファイル/フォルダーのアクセス許可が不十分なときに発生します。たとえば、以下のエラーは、パス C:\Backup\Backup.txt へのアクセスが拒否されたことを示しています:
この問題を解決する方法は次の2つです。
- 「PowerShell」を右クリックし、管理者として実行 を選択してから、スクリプトをもう一度実行してください。
- スクリプトがアクセスしているファイルまたはフォルダーの権限を確認し、Get-Acl と Set-Acl の cmdlet を使用して、必要な権限を付与します。
初心者向け Windows PowerShell スクリプト チュートリアル(PDF)
もっと詳しくさまざまな環境で PowerShell スクリプトを実行する
PowerShell スクリプトを実行する手順は、次のいずれで実行するかによって異なります。
- PowerShell 統合スクリプト環境(ISE)で
- ファイル エクスプローラーを通じて
- のようなコマンドを使ってリモートで実行しますInvoke-Command
PowerShell ISE でスクリプトを実行する
PowerShell ISE は、PowerShell スクリプトの作成、テスト、デバッグのために設計された、使いやすい開発環境です。構文のハイライトや内蔵のデバッグ ツールなどの機能を備えたマルチ ペインのインターフェイスを提供します。PowerShell ISE でスクリプトを実行するには、次の手順を行います:
- PowerShell ISE を開きます。場所を特定するには、スタート メニューで PowerShell ISE を検索するか、powershell_ise を Run ダイアログ(Windows + R)に入力します。以下が表示されるインターフェイスです:
- スクリプト ペイン(上部ウィンドウ)を使用して、スクリプトを作成または読み込みます。新しい .ps1 ファイルを作成するには、FileèNew を押します。スクリプトを保存するには File > Save As をクリックします。
- スクリプト全体を実行するには、Run Script(緑の三角形)ボタンをクリックするか、F5 を押します。選択した行を実行するには、それらをハイライトしてから F8 を押します。
ファイル エクスプローラーからスクリプトを実行する
PowerShell スクリプトを実行するもう一つの便利な方法は、ファイル エクスプローラーから直接実行することです。これは、端末ウィンドウを開かずにスクリプトを実行したい場合や、素早くアクセスしたい場合に役立ちます。
- PowerShell スクリプトが入っているフォルダーへ移動します。
- を右クリックします。.ps1 スクリプトファイルを右クリックしてください。コンテキストメニューで Run with PowerShell を選択します。これにより、新しい PowerShell ウィンドウでスクリプトが起動され、すぐに実行されます。
リモートでスクリプトを実行する
PowerShell には、物理的なアクセスがなくてもリモート マシン上でスクリプトを実行できる機能もあります。これは、複数のサーバーにまたがってタスクを実行する必要があるエンタープライズ環境で特に役立ちます。
前提条件:リモート実行を有効にする
リモートでスクリプトを実行する前に、対象システムで PowerShell Remoting を有効にする必要があります。次のコマンドを実行してください:
Enable-PSRemoting -Force
Invoke-Command の基本構文 Invoke-Command
Invoke-Command を使用すると、リモート コンピューター上で cmdlet やスクリプトを実行できます。たとえば、UpdateSystem.ps1 を名前が Server01 のリモート コンピューターで実行するには、次の cmdlet を使用します:
Invoke-Command -ComputerName Server01 -FilePath C:\Scripts\UpdateSystem.ps1
実行するスクリプト ブロックを指定する
スクリプト ブロックを直接実行するには、次の構文を使用します:
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }
複数のコンピューターでコマンドを実行する
複数のコンピューターでスクリプトを実行するには、下記のように変数を使ってコンピューター名を指定できます。
$computers = "PC1", "PC2", "PC3"
Invoke-Command -ComputerName $computers -ScriptBlock { Your PowerShell Commands }
別の方法として、コンピューター名をカンマ区切りのリストとして渡すこともできます。
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Restart-Service -Name Spooler }
タスク スケジューラで PowerShell スクリプトを自動化する
Windows タスク スケジューラは Windows オペレーティング システムに組み込まれているツールで、ユーザーは特定の日付と時刻、定義されたスケジュール、または特定のイベントによってトリガーされたタイミングでタスクを実行するように設定できます。
PowerShell スクリプトをスケジュールするメリットを理解し、詳細な手順、例、ベスト プラクティス、トラブルシューティングのヒントを確認するには、こちらの記事をご覧ください。How to Automate PowerShell Scripts with Task Scheduler.
高度なテクニック
PowerShell には、スクリプトの再利用性、モジュール性、そしてスクリプト間での変数や関数の共有を高めるための高度なテクニックがあります。重要な概念として、ドットソーシング(dot sourcing)とスクリプトモジュール(script modules)の2つがあります。
ドットソーシング
通常、各スクリプトは新しいセッションで実行され、そのスクリプト内で宣言された変数や関数はスクリプトの終了とともに失われます。ドットソーシングでは、スクリプトが現在のスコープで実行されるため、そのスクリプトで定義された変数、関数、またはエイリアスが、呼び出し元のセッションで利用可能になります。これは、複数のスクリプト間、または同じセッション内で共通の関数や変数を共有したい場合に特に役立ちます。
構文は次のとおりです:
. .\ScriptName.ps1
最初のドットの直後にスペース(. )がある場合、それは PowerShell に対して、スクリプトをドットソースしていることを示します。
2つ目の部分(.\ScriptName.ps1)は、スクリプトへの相対パスです。
スクリプトモジュールの使用
PowerShell のモジュールは、PowerShell の関数、cmdlet、変数などを含むパッケージです。モジュールは、複数のスクリプトで取り込み、使用できるように設計されています。ドットソースと比べて、モジュールはより優れたカプセル化とバージョン管理を提供するため、再利用可能なスクリプトを整理、保守、共有しやすくなります。
スクリプトモジュールを作成するには、スクリプトを .psm1 のファイル拡張子で保存するだけです。.ps1 の代わりにします。
モジュールを作成したら、次のように Import-Module を使用して、そのモジュールの関数を PowerShell セッションで利用できるようにします:
Import-Module C:\Scripts\Modules\Geometry.psm1
PowerShell スクリプトを実行するためのベストプラクティス
以下のベストプラクティスは、PowerShell スクリプトを実行する際のセキュリティを維持するために不可欠であるだけでなく、スクリプトの使いやすさと正確性を高めるためにも重要です。
セキュリティのベストプラクティス
強力な実行ポリシー設定を使用する
PowerShell の実行ポリシーを使用して、信頼でき検証済みのソースからのスクリプトのみを許可します。実行ポリシーは、環境に適したレベルに設定してください。多くの組織では RemoteSigned がバランスのよい選択です。ローカルで作成したスクリプトは実行できる一方で、ダウンロードしたスクリプトは信頼できる発行元によって署名されていることを要求します。
スクリプトにデジタル署名を付ける
PowerShell はスクリプトを実行する前にデジタル署名を確認します。信頼できる証明書でスクリプトにデジタル署名することで、不正な改ざんから保護するのに役立ちます。
必要最小限の権限でスクリプトを実行する
可能な限り、セキュリティ上の脆弱性やエラーが発生した場合の潜在的な被害を抑えるため、最小限の権限でスクリプトを実行してください。
ドキュメント作成のベストプラクティス
適切にドキュメント化されたスクリプトは、現在のユーザーと将来のユーザーの両方にとって、保守・デバッグ・理解がより簡単になります。
コメントを使用する
コメントは、スクリプトの目的、パラメーター、ロジックを説明するために重要です。PowerShell では、コメントは # 記号の後に続けます。
簡単な説明には、インラインコメントを使用してください:
$backupDirectory = "D:\Backup" # Set the backup directory
より詳しい説明を追加する場合、またはコードの一部を一時的に無効にする場合は、ブロックコメント(<# … #>)を使用します:
<#
このスクリプトは重要なデータをバックアップします。
利用可能な空き容量を確認し、バックアップの整合性を検証します。
#>
ヘルプを確認する
PowerShell の関数を適切に使用していることを確認するには、Get-Help を使用して cmdlet の構文と使用方法を確認してください。たとえば、Get-Process のヘルプを表示するには、次のコマンドを実行します:
Get-Help Get-Process
エラー処理のベストプラクティス
適切なエラー処理は、PowerShell スクリプトが予期せず失敗してタスクが未完のままになったり、システムが不安定な状態に残ったりするのを防ぐために不可欠です。
入力を検証する
予期しないエラーを避けるために、スクリプトが入力を検証するようにしてください。これは、名前やユーザーのアバターなど、ユーザーに関連するデータに対して特に重要です。
Try-Catch ブロックを実装する
try-catch ブロックは、PowerShell でエラーを処理するための主要な方法です。これにより、例外を適切にキャッチして処理できます。以下に例を示します:
try {
# Attempt to run a command
Copy-Item -Path $source -Destination $destination -Recurse
} catch {
# Handle the error
Write-Host "An error occurred: $_"
# Additional error recovery actions can be performed here
}
Finally ブロックを使用する
必要に応じて final ブロックを追加します。このブロックは try ブロックでエラーが発生したかどうかにかかわらず実行されるため、リソースの後片付けや最終化コードの実行ができます。以下は例です:
try {
# Code that may throw an exception
Remove-Item -Path $filePath -ErrorAction Stop
} catch {
Write-Host "Failed to remove the file: $_"
} finally {
Write-Host "Cleanup actions have been performed."
}
結論
PowerShell は、システム管理タスクを自動化して正確性を確保し、効率を向上させるための非常に強力なツールです。実行ポリシー、ドットソーシング、スクリプトモジュールなどの中核となる概念を理解し、セキュリティとエラー処理のベストプラクティスに従うことで、PowerShell を最大限に活用し、堅牢で再利用可能、かつ安全なスクリプトを作成して、日々の運用を改善できます。
ご自身のスクリプトを書いて実行しながら、PowerShell を使った実験を始めてみることをおすすめします。まずはシンプルな自動化タスクから取り組み、徐々に高度なスクリプト作成テクニックへと深掘りしていきましょう。練習すればするほど、複雑なワークフローの自動化、リモートシステムの管理、より大規模な IT 運用の対応が上達していきます。
Netwrix Directory Manager
よくある質問(FAQs)
共有する
もっと詳しく
著者について
Tyler Reese
プロダクト マネジメント担当副社長、CISSP
ソフトウェア セキュリティ業界で20年以上の経験を持つ Tyler Reese は、今日の企業が直面している急速に変化するアイデンティティおよびセキュリティ上の課題について深く理解しています。現在、彼は Netwrix Identity and Access Management ポートフォリオのプロダクト ディレクターを務めており、市場動向の評価、IAM 製品ラインの方向性の設定、そして最終的にはエンド ユーザーのニーズに応えることが主な責任です。彼の専門的な経験は、Fortune 500 企業向けの IAM コンサルティングから、大手のダイレクト・トゥ・コンシューマー企業のエンタープライズ アーキテクトとしての業務まで多岐にわたります。現在、彼は CISSP の認定資格を保有しています。