D:\temp
にPowerShellスクリプトがあります。
このスクリプトを実行するとき、ファイルの現在の場所を一覧表示する必要があります。どうすればいいですか?
たとえば、このコードはDOSバッチファイルでそれを実現します。これをPowerShellスクリプトに変換しようとしています...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
PowerShell 3 +
実行中のスクリプトのパスは次のとおりです。
$PSCommandPath
そのディレクトリは次のとおりです。
$PSScriptRoot
PowerShell 2
実行中のスクリプトのパスは次のとおりです。
$MyInvocation.MyCommand.Path
そのディレクトリは次のとおりです。
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
ロマン・クズミンは私見の質問に答えました。 (Import-Module
経由で)モジュールをインポートする場合、モジュール内の$PsScriptRoot
自動変数にアクセスできることを追加します。これにより、モジュールの場所がわかります。
価値があることは、これがスクリプトおよびPowerShell ISEのPowerShell V5で機能することです。
try {
$scriptPath = $PSScriptRoot
if (!$scriptPath)
{
if ($psISE)
{
$scriptPath = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
} else {
Write-Host -ForegroundColor Red "Cannot resolve script file's path"
exit 1
}
}
} catch {
Write-Host -ForegroundColor Red "Caught Exception: $($Error[0].Exception.Message)"
exit 2
}
Write-Host "Path: $scriptPath"
HTH
追伸完全なエラー処理が含まれています。必要に応じて調整してください。