我有以下代码 -
Set-Location "$PSCommandPath"
Write-Host "Starting script."
Write-Host "Current directory is... $PSCommandPath"
刚刚返回 -
Starting script.
Current directory is...
我该如何解决这个问题?
答案 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)"