批处理脚本可以知道它是否从PowerShell中调用?

问题描述:

批处理脚本可以知道它是否从PowerShell调用(没有额外的参数feeded)吗?批处理脚本可以知道它是否从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有关。

+0

我不确定我是否理解这个问题。批处理文件不是从PowerShell直接执行的。在PowerShell中执行批处理文件时,会生成一个新的cmd.exe实例来执行批处理文件的实际执行。 – 2009-09-02 21:26:13

+0

我想他想找到一种在Powershell环境中更改环境变量的方法。 – JasonTrue 2009-09-02 21:36:11

+0

@凯斯希尔:没错。我正在寻找一种方法来从批处理脚本中知道是否从PS中调用它。 – 2009-09-02 22:51:52

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

+0

这是一种丑陋的方式,但至少可以完成这项工作。谢谢基思。 – 2009-09-03 20:39:49

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

+0

意图是没有国旗这样做。谢谢。 – 2009-09-03 20:39:05

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

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

+0

你确定吗? %PSMODULEPATH%似乎是全球环境。设置,因此也存在于我的机器上的cmd.exe外壳上。 – 2009-09-02 19:27:53

+0

不确定,因为我只有我的机器来检查,但是当我从资源管理器运行“CMD.exe”时,它不存在。当我运行Powershell时,它确实存在。当我从Powershell运行cmd.exe时,环境会被复制到新的cmd.exe中,并在那里存在。 – JasonTrue 2009-09-02 19:49:39

+2

%PSMODULEPATH%是我在Win7上的全局env变量。 – 2009-09-02 21:14:05