PowerShell的新手。我在编写脚本时注意到Path.GetFullPath()
将返回相对于外部脚本目录的路径。例如:
# In your PowerShell console...
cd ~/Downloads
echo "cd ..;[IO.Path]::GetFullPath('script.ps1')" > script.ps1
powershell -ExecutionPolicy Bypass './script.ps1'
当应打印C:\Users\You\Downloads\script.ps1
时,打印C:\Users\You\script.ps1
(请注意cd ..
)。
这是PowerShell中的一个错误,有哪些方法可以避免这种情况?
答案 0 :(得分:5)
[IO.Path]::GetFullPath('script.ps1')
使用进程的当前工作目录。这与powershell的CWD不同。要更改进程的CWD(以获得您期望的输出),您必须使用.NET API来更改进程CWD,而不是PS内部的cd ..
。 / p>
我确信这不是一个错误,而是设计。设计的一个原因是PS在文件系统之外具有CWD的概念。因此,您的CWD可以位于注册表,wsman提供程序以及选择实现目录的任何第三方提供程序插件中。这不能在流程的CWD中进行镜像,因为它严格适用于文件系统。
一般情况下,当您将PS概念与.NET概念混合时,事情就会很好。然而,有些地方存在阻抗不匹配。这是其中之一。