Resolve-Path cmdlet 究竟有什么作用?

Mut*_*pus 3 powershell path

我最近开始在我的 Windows 10 系统上使用 Powershell。我创建了一个配置文件,我想放入一个变量,该变量链接到我的文档部分中的文件夹。但是,我不想对路径进行硬编码,因为我知道如果我的配置文件名称在硬盘驱动器传输中发生更改,就像我上次发送它时所做的那样,我需要进入并重新编写它维修。所以我的第一个想法是放入这样的东西:

$Var = $(~\Documents\Folder)
Run Code Online (Sandbox Code Playgroud)

但这吐了一个错误。然后我了解了 Resolve-Path Cmdlet,它一眼看上去就是我所需要的。但是,当我这样做时:

$Var = $(Resolve-Path ~\Documents\Folder)
Run Code Online (Sandbox Code Playgroud)

... 我懂了:

>$Var

Path
----
C:\Users\Username\Documents\Folder

>
Run Code Online (Sandbox Code Playgroud)

这似乎是一个问题。但是,当我尝试时cd $Var,它成功了,这让我非常困惑。我认为结果中的无关Path标头会导致错误。

究竟做了Resolve-Path 什么,为什么它在传入时仍然被正确解释cd?另外,有没有办法让Resolve-Path 包含无关信息并只返回扩展路径?

Ric*_*ard 7

您看到标题的原因Path是因为Resolve-Path正在返回一个类型的对象,System.Management.Automation.PathInfo并且当它没有被捕获到变量中时,它会以可读格式 IE 的形式作为字符串输出到控制台:

 ObjProperty1      ObjProperty2      ObjProperty3  ...
 ---------         ---------         ---------     ...
 Value1            Value2            Value3        ...
Run Code Online (Sandbox Code Playgroud)

这个对象使用cdPowerShell是足够聪明来解析对象($var)之前cd运行。PowerShell将返回 path 属性的值cd意味着cd将看到一个字符串"C:\Users\Username\Documents\Folder"而不是对象头。

如果您只想返回没有标题的路径,请使用Selectcmdlet 的-ExpandProperty参数:

$var = Resolve-Path '~\Documents\Folder' | select -ExpandProperty Path 
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关Resolve-PathMSDN 的更多信息,这是一个很好的起点(链接)。