web-dev-qa-db-ja.com

PowerShellスクリプトのファイルシステムの場所を取得するにはどうすればよいですか?

D:\tempにPowerShellスクリプトがあります。

このスクリプトを実行するとき、ファイルの現在の場所を一覧表示する必要があります。どうすればいいですか?

たとえば、このコードはDOSバッチファイルでそれを実現します。これをPowerShellスクリプトに変換しようとしています...

FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
59
Santhosh

PowerShell 3 +

実行中のスクリプトのパスは次のとおりです。

$PSCommandPath

そのディレクトリは次のとおりです。

$PSScriptRoot

PowerShell 2

実行中のスクリプトのパスは次のとおりです。

$MyInvocation.MyCommand.Path

そのディレクトリは次のとおりです。

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
126
Roman Kuzmin

ロマン・クズミンは私見の質問に答えました。 (Import-Module経由で)モジュールをインポートする場合、モジュール内の$PsScriptRoot自動変数にアクセスできることを追加します。これにより、モジュールの場所がわかります。

10
stej

価値があることは、これがスクリプトおよび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

追伸完全なエラー処理が含まれています。必要に応じて調整してください。

0
Quantium