Почему PowerShell разрешает пути из $home вместо текущего каталога?

Я ожидаю, что этот маленький powershell один лайнер повторит полный путь к файлу foo.txt, где каталог является моим текущим каталогом.

[System.IO.Path]::GetFullPath(".\foo.txt")

Но это не так. Он печатает...

C:\Documents and Settings\Administrator\foo.txt

Я не в директории $home. Почему он разрешается там?

Ответ 1

[System.IO.Path] использует текущую директорию процесса оболочки. Вы можете получить абсолютный путь с помощью командлета Resolve-Path:

Resolve-Path .\foo.txt

Ответ 2

В соответствии с документацией для GetFullPath она использует текущий рабочий каталог для разрешения абсолютного пути. Рабочий каталог powershell не совпадает с текущим местоположением:

PS C:\> [System.IO.Directory]::GetCurrentDirectory()
C:\Documents and Settings\user
PS C:\> get-location

Path
----
C:\

Я полагаю, вы могли бы использовать SetCurrentDirectory, чтобы они соответствовали:

PS C:\> [System.IO.Directory]::SetCurrentDirectory($(get-location))
PS C:\> [System.IO.Path]::GetFullPath(".\foo.txt")
C:\foo.txt