【问题标题】:Can a Batch script know if it's called from PowerShell?批处理脚本可以知道它是否是从 PowerShell 调用的吗?
【发布时间】:2009-09-02 18:10:42
【问题描述】:

批处理脚本有什么方法可以知道它是否是从 PowerShell 调用的(不提供额外参数)?

需要类似的东西..

if (%THIS_BATCH_CALLED_FROM_POWERSHELL%)
    ... warn the user or drop back to powershell to execute the proper instructions...

this question - virtualenv-in-powershell相关的问题。

【问题讨论】:

  • 我不确定我是否理解这个问题。批处理文件不直接从 PowerShell 执行。当您在 PowerShell 中执行批处理文件时,会生成一个新的 cmd.exe 实例来执行批处理文件的实际执行。
  • 我想他想找到一种方法来改变Powershell环境中的环境变量。
  • @Keith Hill:没错。我正在寻找一种方法来从批处理脚本中知道它是否是从 PS 调用的。
  • @JasonTrue: 也是这样,但首先至少我们需要检测我们是否在 PS 环境中。

标签: powershell batch-file


【解决方案1】:

您可以使用“tlist.exe /t”或this one 之类的工具来显示当前进程和所有父进程的PID。您可以检查其中的每一个 PID,看看是否有任何对应于 PowerShell.exe。

【讨论】:

  • 这是一种丑陋的方式,但至少可以完成这项工作。谢谢基思。
【解决方案2】:

您可以在脚本中添加一个默认警告,并传递一个标志,告诉它不要显示警告。当你从 power shell 调用它时,传递那个标志。

【讨论】:

  • 目的是在没有标志的情况下执行此操作。谢谢。
【解决方案3】:

在我的 Powershell 环境(PS 2.0 CTP)中,我似乎有一个环境变量 PSMODULEPATH,它不是由普通命令行环境设置的,但当 Powershell 有一个子 CMD.exe shell 时仍然存在。

我认为您可能能够“足够可靠地”检查批处理脚本中是否存在 PSMODULEPATH。

【讨论】:

  • 你确定吗? %PSMODULEPATH% 似乎是一个全局环境。设置,因此也存在于我的机器上的 cmd.exe shell 上。
  • 不确定,因为我只有我的机器要检查,但是当我从资源管理器运行“CMD.exe”时,它不存在。当我运行 Powershell 时,它确实存在。当我从 Powershell 运行 cmd.exe 时,环境被复制到新的 cmd.exe 中并存在。
  • %PSMODULEPATH% 是我在 Win7 上的全局环境变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2011-05-22
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多