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