このような擬似構文を持つスクリプトファイルを含めたいと思います。
Include '.\scripA.ps1'
しかし、私が見つけた唯一のものは次のようなものです。
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')
それはいです。
Nice相対パスでスクリプトを含める方法はありますか?
残念ながらいいえ、良い方法はありません。 PowerShellは、V1ではこのアイデアをまったくサポートしていません。本当にあなたが取っているアプローチは最高のアプローチです
次のように$ PSScriptRootパラメーターを利用できます。
. "$PSScriptRoot\script.ps1"
ファイルをドットソース(インクルード)できます:
。 。\ scriptA.ps1
スクリプトの完全なパスを取得するには:
Resolve-Path。\ scriptA.ps1
すでに述べたように、ドットソーシングは特にきれいではありませんが、最も簡単なオプションです。ただし、この形式はほんの少しきれいになります:
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)
また、明示的にするのに便利な相対パスに関するメモ:元の投稿は、現在の作業ディレクトリ;実際には、意図は現在のスクリプトのソースディレクトリに関連することです(alex2k8の独自のコードサンプルが示すように)。したがって、これにより、現在のスクリプトは同じリポジトリの他のスクリプトにアクセスできます。
V2(Win7/2008R2以降のネイティブ。$psversiontable.psversion
)次のようなファイルを簡単に含めることができます。
. "RelativeOrAbsolutePathToFile\include.ps1"
$result = FunctionInIncludeFile()
これはおそらくどのディレクトリからでも動作しますが、開始ディレクトリがインクルードしようとしているファイルの直接の先行ディレクトリではない場合は、sloooooowwwwwが見つかります。 IOW、この検索の開始点がc:\または他のドライブ文字のルートである場合、恐らく恐ろしく遅いでしょう。
。 $(Resolve-Path -literal $(gci -Recurse include.ps1))
これは、PC上でスクリプトを開発しているが、スクリプトをスケジュールされたタスクとして実行するサーバーに展開する必要がある場合に特にうまく機能します。
$ PSScriptRootおよび "Split-Path"ディレクティブを使用して、相対パスに対して正常に機能させることができます。 . (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')