次のディレクトリツリーがあります。
e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
そして、「services」フォルダにあるスクリプトから「utils」フォルダにある「Press any key to continue.ps1」という名前のスクリプトを呼び出したいと思います。それ、どうやったら出来るの?相対パスがわかりません。
私はそれをこのようにしようとしました:
"$ '.\..\utils\Press any key to continue.ps1'"
しかし、うまくいきませんでした。
あなたが何をしていたかに基づいて、以下が動作するはずです:
& "..\utils\Press any key to continue.ps1"
または
. "..\utils\Press any key to continue.ps1"
(&
と.
の使用の違いを調べて、どちらを使用するかを決定します)
これは私がそのような状況を処理する方法です(@Shayが言及したことに対するわずかなバリエーション):
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$utilsDir = Join-Path -Path $scriptDir -ChildPath ..\utils
& "$utilsDir\Press any key to continue.ps1"
呼び出し元のスクリプトに次の関数を追加して、ディレクトリパスを取得し、utilsパスとスクリプト名を結合します。
# create this function in the calling script
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
# generate the path to the script in the utils directory:
$script = Join-Path (Get-ScriptDirectory) 'utils\Press any key to continue.ps1'
# execute the script
& $script
非常に有益でした。同様の問題があり、このように動作して、親フォルダから他のスクリプトを呼び出すことができました。
$CommandPath = (Get-Location).Path | Split-Path -Parent; $script = "$CommandPath\Logins\Login_SSI_SST_exch2010_DKSUND_Exchange365.ps1"; & $script