【问题标题】:PowerShell PSScriptRoot is nullPowerShell PSScriptRoot 为空
【发布时间】:2017-11-12 10:23:05
【问题描述】:

当我运行$PSScriptRoot 时,它返回null。我使用的是 PS 版本 4。

$val  = Join-Path -Path $PSScriptRoot WebPlatformInstaller_amd64_en-US.msi

错误

Join-Path:无法将参数绑定到参数“路径”,因为它是 空字符串。

【问题讨论】:

  • 您是否在 PowerShell ISE 中执行此操作?

标签: powershell powershell-4.0


【解决方案1】:

您必须确保此表达式在保存的 .ps1 脚本中。

这可能发生在以下情况:

  • 您在 PowerShell ISE 控制台中使用此语句
  • 您在没有脚本文件的情况下在 PowerShell 控制台中使用此语句
  • 您仅将此表达式标记为在 PowerShell ISE 中执行

【讨论】:

  • 那么如何在ISE中调试脚本...?
  • 我猜它不能在调试时设置,因为该值被忽略,然后如果您更改脚本,它将被强制保存以便调试。
【解决方案2】:

如果使用 ISE,请使用:

$psISE.CurrentFile.FullPath

当 ISE 启动时,会创建 $psISE 并可用于确定 ISE 实例的当前路径。这是在 3.0 版本中引入的。

见ISE Object Model Hierarchy

如果您想在 shell 或 ISE 中获取路径,您可以使用以下内容:

if ($psISE)
{
    Split-Path -Path $psISE.CurrentFile.FullPath        
}
else
{
    $global:PSScriptRoot
}

【讨论】:

  • $psISE.CurrentFile.FullPath 如果从另一个 powershell 脚本调用文件,则不显示文件路径
【解决方案3】:

你可以使用

$PWD.Path 

它适用于 PowerShell ISE 和 Powershell 控制台。它返回当前工作目录。

$PSScriptRoot 是保存当前脚本的根路径。在命令中使用时,它将返回空白,因为没有您正在寻找的当前路径的脚本。

【讨论】:

  • 在 Windows PowerShell 和 PowerShell Core 中工作。
猜你喜欢
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2018-01-18
相关资源
最近更新 更多