繁体   English   中英

PowerShell中的奇怪行为:在下标中调用Path.GetFullPath返回相对于外部脚本的路径

[英]Strange behavior in PowerShell: Invoking Path.GetFullPath in subscripts return paths relative to the outer script

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\\script.ps1时打印C:\\Users\\You\\Downloads\\script.ps1 C:\\Users\\You\\script.ps1 (请注意cd .. )。

这是PowerShell中的错误吗?有什么方法可以避免这种情况?

[IO.Path]::GetFullPath('script.ps1')使用进程的当前工作目录。 这与Powershell的CWD不同。 要更改进程的CWD(以获取所需的输出),您必须使用.NET API来更改进程的CWD,而不是PS内部的cd ..

我相信这不是错误,而是设计使然。 设计的原因之一是PS在文件系统之外具有CWD的概念。 因此,您的CWD可以在注册表中,wsman提供程序中以及任何选择实现目录的第三方提供程序插件中。 由于它严格适用于文件系统,因此无法在进程的CWD中进行镜像。

通常,将PS概念与.NET概念混合使用时,一切都会很好地进行。 但是,在某些地方存在阻抗不匹配的情况。 这就是其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM