为什么不写主机" $ PSCommandPath"输出我当前的路径?

时间:2014-07-09 20:29:21

标签: powershell path output

我有以下代码 -

Set-Location "$PSCommandPath"
Write-Host "Starting script."
Write-Host "Current directory is... $PSCommandPath"

刚刚返回 -

Starting script.
Current directory is...

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

如果我不得不猜测,您运行的是不支持$PSCommandPath的旧版PowerShell。该变量仅适用于3.0及更高版本。来自documentation

  

$PSCommandPath

     

包含正在运行的脚本的完整路径和名称。   此参数在所有脚本中都有效。 这个自动变量是   在Windows PowerShell 3.0中引入。

因此,与所有未定义的变量一样,$PSCommandPath被视为$null

PS > ($undefined).GetType()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ ($undefined).GetType()
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull


PS > 
PS > $var = 123
PS > Write-Host "My variable: $var"
My variable: 123

PS > Write-Host "My variable: $undefined"
My variable: 

PS > 

要解决此问题,您需要将PowerShell升级到3.0或更高版本。


此外,您似乎确实需要Get-Location,它返回当前工作目录:

Write-Host "Current directory is... $(Get-Location)"