このような疑似構文を含むスクリプト ファイルをインクルードしたいと思います。
Include '.\scripA.ps1'
しかし、私が見つけた唯一のものは、次のようなものです。
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')
それは醜いです。
相対パスでスクリプトを含める良い方法はありますか?
このような疑似構文を含むスクリプト ファイルをインクルードしたいと思います。
Include '.\scripA.ps1'
しかし、私が見つけた唯一のものは、次のようなものです。
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')
それは醜いです。
相対パスでスクリプトを含める良い方法はありますか?
次のように $PSScriptRoot パラメーターを利用できます。
. "$PSScriptRoot\script.ps1"
ファイルをドット ソース (インクルード) することができます。
. .\scriptA.ps1
スクリプトの完全なパスを取得するには:
解決パス .\scriptA.ps1
すでに述べたように、ドットソーシングは特にきれいではありませんが、最も簡単なオプションです。ただし、この形式では少しすっきりします。
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)
また、明示的にするのに役立つ相対パスに関する注意:元の投稿は、現在の作業ディレクトリからの相対パスが必要であることを示唆しているように見える場合があります。実際には、現在のスクリプトのソースディレクトリを基準にすることを目的としています(alex2k8独自のコードサンプルが示すように)。したがって、これにより、現在のスクリプトが同じリポジトリから他のスクリプトにアクセスできるようになります。
残念ながらいい方法はありません。V1 では、PowerShell はこの考え方をまったくサポートしていません。本当にあなたがとっているアプローチは最善のアプローチです
V2 (Win7/2008R2 以降のネイティブ。 を参照$psversiontable.psversion) では、次のようなファイルを簡単に含めることができます。
. "RelativeOrAbsolutePathToFile\include.ps1"
$result = FunctionInIncludeFile()