PowerShell 技能连载 - 理解 PowerShell 和文件系统

PowerShell 维护着它自己的位置:

1
2
3
4
5
PS> Get-Location

Path
----
C:\Users\tobwe

当前路径指向所有 cmdlet 使用的相对路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
PS> Get-Location

Path
----
C:\Users\tobwe



PS> Resolve-Path -Path .

Path
----
C:\Users\tobwe

还有另一个当前路径,是由 Windows 维护的,影响所有 .NET 方法。它可能 PowerShell 的当前路径不同:

1
2
3
4
5
6
7
PS> [Environment]::CurrentDirectory
C:\test

PS> [System.IO.Path]::GetFullPath('.')
C:\test

PS>

所以如果在脚本中使用跟文件系统有关的 .NET 方法,可能需要先同步两个路径。这行代码确保 .NET 使用和 PowerShell 相同的文件系统路径:

1
PS> [Environment]::CurrentDirectory = $ExecutionContext.SessionState.Path.CurrentFileSystemLocation

同步之后,cmdlet 和 .NET 方法在同一个路径上工作:

1
2
3
4
5
6
7
8
9
10
PS> [Environment]::CurrentDirectory = $ExecutionContext.SessionState.Path.CurrentFileSystemLocation

PS> [System.IO.Path]::GetFullPath('.')
C:\Users\tobwe

PS> Resolve-Path '.'

Path
----
C:\Users\tobwe

PowerShell 技能连载 - 理解 PowerShell 和文件系统

http://blog.vichamp.com/2017/07/20/understanding-powershell-and-system-paths/

作者

吴波

发布于

2017-07-20

更新于

2022-07-06

许可协议

评论