【问题标题】:Getting Script name in Powershell在 Powershell 中获取脚本名称
【发布时间】:2016-01-31 01:35:38
【问题描述】:

除了 $MyInvocation.InvocationName 在 powershell 中还有其他方法来获取脚本名称吗? 因为我需要将我的脚本转换为 exe,在这种情况下它不适用于该 exe。

【问题讨论】:

  • 如何调用exe以及如何传递脚本名称?
  • 我使用实用程序将脚本转换为 exe。该功能适用​​于脚本,但如果我使用 exe 代替脚本,它就不起作用了。
  • 我知道的唯一方法是使用 $Myinvocation。也许实用程序(PS2EXE 可能§??)无法转换引用 exe 或其附件的 PSCmdlet.MyInvocation 属性。
  • 是的,我也这么认为,所以我正在寻找其他选项..Newways 感谢您的兴趣..
  • 也许如果您解释为什么需要脚本名称,我们可以建议替代解决方案。

标签: powershell


【解决方案1】:

我假设由于您将 powershell 脚本转换为可执行文件,因此您位于可执行文件的位置之后。你可以这样得到它:

[Environment]::GetCommandLineArgs()[0]

【讨论】:

  • 很好,这就是我真正想要的,非常感谢 jon Z..:)
  • fwiw - 如果您在 ISE 中进行调试,脚本名称将成为第二个参数:[Environment]::GetCommandLineArgs()[1]
  • 试试$PSCommandPath$MyInvocation.PSCommandPath(根据这个很棒的答案:stackoverflow.com/a/43643346/5649639
【解决方案2】:

如果您想要在 ISE 内外都可以使用的东西,您可以使用

$MyInvocation.InvocationName

由于可以返回完整路径和 .\YourScript.ps1,您可以使用以下命令解析名称:

[Regex]::Match( $MyInvocation.InvocationName, '[^\\]+\Z', [System.Text.RegularExpressions.RegexOptions]::IgnoreCase -bor [System.Text.RegularExpressions.RegexOptions]::SingleLine ).Value

【讨论】:

  • 从函数内部调用时,$MyInvocation.InvocationName 是函数的名称。
猜你喜欢
  • 2022-11-16
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2010-11-22
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
相关资源
最近更新 更多