web-dev-qa-db-ja.com

相対パスで別のPowerShellスクリプトを呼び出すにはどうすればよいですか?

次のディレクトリツリーがあります。

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'"

しかし、うまくいきませんでした。

16
t3chb0t

あなたが何をしていたかに基づいて、以下が動作するはずです:

& "..\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"
31
manojlds

呼び出し元のスクリプトに次の関数を追加して、ディレクトリパスを取得し、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 
9
Shay Levy

非常に有益でした。同様の問題があり、このように動作して、親フォルダから他のスクリプトを呼び出すことができました。

$CommandPath = (Get-Location).Path | Split-Path -Parent; $script = "$CommandPath\Logins\Login_SSI_SST_exch2010_DKSUND_Exchange365.ps1"; & $script
0
King Rustamus