HOWTO · PowerShell
PowerShell スクリプトの現在の場所を取得する方法
この記事では、異なるバージョンの PowerShell スクリプト環境で PowerShell スクリプトの現在の位置を取得する方法について説明します。
このページの内容
この包括的なガイドでは、PowerShell スクリプトの現在の場所を特定するさまざまな方法について掘り下げます。これはスクリプトの可搬性と信頼性を向上させる基礎的な要素です。議論される各方法は、異なるバージョンの PowerShell やスクリプト環境に対応しており、広範な適用性を確保します。
まず、初期の PowerShell バージョンに適した多目的アプローチである Split-Path コマンドレットから始め、次に PowerShell 3 以降の $PSScriptRoot の利便性に移行します。さらに、堅牢な $ExecutionContext メソッドと簡単な Get-Location コマンドレットを探求し、多様な環境や要件に対応します。
最後に、馴染みのある pwd エイリアスでプロセスを簡素化し、PowerShell の適応性を示します。
Split-Path コマンドレットを使用して PowerShell スクリプトの現在の場所を取得する
PowerShell 3 の前には、Split-Path コマンドレットを使用して MyInvocation.MyCommand.Definition プロパティを問い合わせるより良い方法はありませんでした。
$global:MyInvocation で Split-Path を使用する主な目的は、現在実行中の PowerShell スクリプトのディレクトリパスを抽出することです。これは特に、スクリプトが他のファイルやスクリプトと同じ場所にあるディレクトリと相互作用する必要がある場合や、スクリプトの動作がその場所に依存する場合に便利です。
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
Write-Host "Current script location: $scriptDirectory"
この例では、Split-Path を -Parent パラメーター付きで使用して、実行中のスクリプトのフルパスからディレクトリコンポーネントを分離しています。このパスは $MyInvocation.MyCommand.Definition から取得されます。
結果として得られるディレクトリパスは、変数 $scriptDirectory に保存されます。
最後に、Write-Host を使用してこのディレクトリパスを出力し、スクリプトの現在の場所を明確かつ即時に表示します。この方法は効率的であるだけでなく、異なるバージョンの PowerShell 全体での互換性を確保します。
出力:
これは、保存された PowerShell(.ps1)ファイルで上記の構文を含めた場合にのみ機能することに注意してください。コマンドラインで上記の構文を実行すると、Null 例外が返されます。
また、PowerShell の統合スクリプト環境(ISE)で上記の構文を選択として実行すると(選択として実行またはF8キーを押す)、ParameterArgumentValidationErrorNullNotAllowed または Null 例外がトリガーされることにも注意が必要です。
問題を修正するための簡単な解決策は、$psISE 変数を呼び出して CurrentFile.FullPath プロパティを取得し、そこからスクリプトの現在の場所を得ることです。
$PSScriptRoot 変数を使用して PowerShell スクリプトの現在の場所を取得する
PowerShell バージョン 3 以降を実行している場合、現在のファイルまたはモジュールのディレクトリを格納するための自動変数が導入されています。
$PSScriptRoot 変数は、実行中のスクリプトのディレクトリパスを保持します。この自動変数は、パスをハードコーディングすることが実用的でないポータブルスクリプトの作成に非常に役立ちます。
スクリプトが自身と同じディレクトリにあるファイルやモジュールをロードする必要がある場合に特に便利です。
Write-Host "The current script is located in: $PSScriptRoot"
私たちのスクリプトでは、Write-Host コマンドレットを使用して $PSScriptRoot の値を印刷します。この変数は自動的にスクリプトが位置するディレクトリのフルパスを含んでいます。
Write-Host を呼び出すことで、パスが PowerShell コンソールに表示されることを確保します。このアプローチは簡単で効果的であり、さまざまな環境やシナリオに対してスクリプトを柔軟にします。
出力:
Windows PowerShell で作業ディレクトリを取得して PowerShell スクリプトの現在の場所を取得する
スクリプトの現在の場所を取得する方法について議論したので、スクリプトの現在の作業ディレクトリを取得する方法を学ぶのも有用です。
Windows PowerShell v2 では、$ExecutionContext 変数に EngineIntrinsics プロパティが含まれています。この変数とプロパティを使用して、cmdlet に利用可能な実行オブジェクトを見つけることができ、実行中の Windows PowerShell スクリプトの現在の作業ディレクトリを含みます。
$currentScriptLocation = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
Write-Host "Current script location: $currentScriptLocation"
この例では、$ExecutionContext を利用して現在のスクリプトの場所を取得します。パラメーター'.\'で GetUnresolvedProviderPathFromPSPath メソッドを呼び出すことで、PowerShell に現在のディレクトリ('.\'で表される)をフルパスに変換するように効果的に求めています。
結果は変数 $currentScriptLocation に保存され、Write-Host を使用して表示されます。この方法は特に堅牢であり、スクリプトが特定の方法で実行されることに依存せず、異なるバージョンの PowerShell 全体で機能します。
出力:
ただし、最新の Windows PowerShell を実行している場合、便利にするための別のコマンドレットが導入されています。Get-Location コマンドレットを使用し、Path プロパティを呼び出してスクリプトの現在の作業ディレクトリを取得できます。
$currentDirectory = (Get-Location).Path
Write-Host "Current directory: $currentDirectory"
提供されたコードでは、最初に Get-Location コマンドレットを使用して現在の場所オブジェクトを取得し、その Path プロパティにアクセスして現在のディレクトリを文字列として取得し、変数 $currentDirectory に保存します。
最後に、Write-Host を使用してこの情報を表示します。この方法は、ディレクトリの場所に関する実行コンテキストを知る必要のあるスクリプトに非常に効果的です。
出力:
PowerShell では、pwd は Get-Location コマンドレットのエイリアスです。Get-Location コマンドレットは、PowerShell セッションの現在の作業ディレクトリを取得します。これは、Unix 系システムの伝統的な pwd(print working directory)コマンドが行うこととまったく同じです。
PowerShell はその柔軟性と互換性を念頭に置いて、他のシェル環境(Unix や Linux など)に慣れたユーザーが PowerShell で同様のコマンドを使用しやすくするために、これらのエイリアスを提供しています。
$currentDirectory = pwd
Write-Host "Current directory: $currentDirectory"
この例では、pwd コマンドを使用して現在の場所オブジェクトを取得し、その後それを $currentDirectory 変数に保存します。Write-Host を活用して、現在のディレクトリのパスをコンソールに出力します。
この方法は特に簡潔であり、複雑な構文や追加のパラメーターを必要としません。スクリプトが実行されているディレクトリを確認するための迅速で信頼性のある方法です。
出力:
結論
この記事では、PowerShell スクリプトの現在の場所を特定するためのさまざまな方法について徹底的に探求しました。各方法は異なる PowerShell バージョンやスクリプトコンテキストに合わせて調整されています。初期バージョンに適した Split-Path コマンドレットから、後のバージョンにおける自動的な $PSScriptRoot 変数まで、このガイドは幅広い PowerShell ユーザーに関連性を提供します。
さらに、$ExecutionContext と Get-Location コマンドレットの使用は、それぞれ堅牢でシンプルな代替手段を提供し、pwd エイリアスは異なるスクリプト背景を持つユーザーにとって馴染みのあるオプションを提供します。この包括的なガイドは、スクリプトの可搬性と信頼性を向上させるだけでなく、PowerShell の多才な性質を強調します。
これらの技術を駆使することで、スクリプトライターやシステム管理者はファイルパスの依存関係を処理する能力が向上し、さまざまな環境でより適応性のある効果的なスクリプトを作成できます。最終的には、これらの方法を理解することが PowerShell スクリプティングを習得し、異なるプラットフォームやシナリオでのスクリプトの機能を最適化するための基本です。