【问题标题】:Determine if Powershell script started in main scope?确定 Powershell 脚本是否在主范围内启动?
【发布时间】:2014-03-10 20:01:45
【问题描述】:

我是 Powershell 初学者。我正在编写一些脚本文件(.ps1)

我想确定我的脚本是如何被调用的:

是“主”脚本还是来自另一个文件的点?

在 python 中,我会使用类似的东西:

if __name__ == "__main__":

PowerShell中有类似的东西吗?

更新

阅读答案后,我在 .ps1 文件末尾使用以下内容:

if ($MyInvocation.InvocationName -ne '.')
{
  # do "main" stuff here
}

欢迎任何包含这可能失败的答案。

看来这是一个重复的问题,我只是没有使用正确的搜索词: Determine if PowerShell script has been dot-sourced

【问题讨论】:

  • @HyperAnthony 感谢您的链接。 PowerShell 是否有与 python 版本等效的单行代码?我了解 PowerShell 脚本是从上到下运行的。所以我想在我的脚本底部附近放置一个测试条件,只有当它通过时,脚本的其余部分才会运行。

标签: python powershell


【解决方案1】:

如果您想知道它是如何被调用的,请查看 $myinvocation 自动变量。

如果你只是想测试你是否在全局范围内:

Try {if (get-variable args -scope 1){$true}}
Catch {$false}

如果您在子范围内运行,则应返回 $true。如果您已经在全局范围内,则没有父范围,它会抛出错误并返回 $false。

【讨论】:

  • 谢谢,这似乎是个好信息。你知道 $myinvocation.CommandOrigin 是否会给我我想要的吗?如果我从 powershell 启动脚本,我的初步测试似乎显示“运行空间”,如果另一个脚本正在调用它,则显示“内部”?我没有找到关于 CommandOrigin 成员的任何详细信息。
  • 我还看到 InvocationName 似乎是“。”还是脚本的名称?也许这是一个更好的方法?
  • 我不知道 Python,所以我不太确定该告诉你要查找的内容是那个 Python 命令的类似物。
  • 谢谢!每个作用域都使用它自己的 $args 进行初始化,因此它应该始终存在:)。
猜你喜欢
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多