PowerShell中$PWD与Get-Location的区别?多运行空间场景差异?
PowerShell中$PWD与Get-Location的差异解析
核心结论
$PWD就是Get-Location的预定义自动变量别名,无论常规场景还是多运行空间场景,二者返回的值完全一致,没有差异。
常规场景表现
- 直接验证:执行
$PWD -eq Get-Location会返回True,说明二者指向同一个路径对象。 - 类型一致:两者返回的都是
System.Management.Automation.PathInfo类型(若在PSDrive子路径下则为System.Management.Automation.ChildPathInfo),可通过$PWD.GetType()和Get-Location | Get-Member查看细节。 - 本质关联:$PWD是PowerShell预定义的自动变量,每次读取它的值时,底层就是调用
Get-Location命令,结果完全同步。
多运行空间场景表现
PowerShell的运行空间(Runspace)是独立的执行上下文,每个运行空间拥有专属的Shell位置:
- 不管是
$PWD还是Get-Location,都基于当前所在运行空间的上下文返回值,不同运行空间的结果相互独立。 - 举例:创建新运行空间并切换其当前目录后,在该空间内调用
$PWD或Get-Location,返回的都是新空间的当前路径,不会与主运行空间的位置混淆。
额外提醒
二者返回的是PowerShell Shell层面的「运行空间当前位置」,和.NET进程级的[System.Environment]::CurrentDirectory完全无关——后者是全局进程目录,而$PWD/Get-Location是运行空间级别的上下文目录。
内容的提问来源于stack exchange,提问作者Martin Ba
相关产品推荐
相关产品推荐

