Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
批处理脚本能否知道它是否';是从PowerShell打来的?_Powershell_Batch File - Fatal编程技术网

批处理脚本能否知道它是否';是从PowerShell打来的?

批处理脚本能否知道它是否';是从PowerShell打来的?,powershell,batch-file,Powershell,Batch File,是否有任何方法可以让批处理脚本知道它是否是从PowerShell调用的(没有额外的参数提供) 需要像……这样的东西 if (%THIS_BATCH_CALLED_FROM_POWERSHELL%) ... warn the user or drop back to powershell to execute the proper instructions... 与相关的问题。您可以在脚本中添加默认警告,并向其传递一个标志,告诉它不要显示警告。当您从power shell调用它时,将该标

是否有任何方法可以让批处理脚本知道它是否是从PowerShell调用的(没有额外的参数提供)

需要像……这样的东西

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

与相关的问题。

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

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


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

您可以使用类似“tlist.exe/t”的工具或显示当前进程和所有父进程的PID。您可以检查每个PID,看看是否有与PowerShell.exe对应的PID。

确定吗?%PSMODULEPATH%似乎是一个全局环境。设置,因此也存在于我的机器上的cmd.exe外壳上。不确定,因为我只有我的机器要检查,但当我从资源管理器运行“cmd.exe”时,它不存在。当我运行Powershell时,它确实存在。当我从Powershell运行cmd.exe时,环境被复制到新的cmd.exe中,并且它存在于那里。%PSMODULEPATH%是我在Win7上的全局环境变量。我不确定我是否理解此问题。批处理文件不是直接从PowerShell执行的。在PowerShell中执行批处理文件时,会生成一个新的cmd.exe实例来实际执行批处理文件。我想他想找到一种方法来更改PowerShell环境中的环境变量。@Keith Hill:没错。我正在寻找一种方法,从批处理脚本中知道它是否是从PS调用的。@JasonTrue:这也是,但首先我们需要检测我们是否在PS环境中。目的是在没有标志的情况下执行此操作。谢谢。这是一个丑陋的方式,但至少做的工作。谢谢你,基思。