windows - 查明进程是否正在 cmd.exe 或 PowerShell 窗口中运行

标签 windows powershell

想象一下,您正在用高级语言编写一个程序,其中不允许您执行自定义系统调用(win32 API),因为代码是交叉编译的或该语言不支持该程序。

当您的进程在 Windows 上运行时,有没有办法确定您是否在 powershell 中运行而不是在 cmd.exe 中运行?或者反之亦然?

我正在尝试从程序中打印“我正在 powershell 中运行”和“我正在 cmd.exe 中运行”。

在本例中,我正在用 Golang 编写程序,但这并不重要,因为我不想遍历进程树。

最佳答案

Eryksun 可能对它的有用性有一定的看法,但是有一个 post about getting the parent process

将以下文本放入 ps1 脚本中:

$parentpid=(gwmi win32_process -Filter "processid='$pid'").parentprocessid
Write-Host ("I am running in {0}" -f (Get-Process -id $parentpid).Name)

从 CMD 调用 PowerShell 运行它:

I am running in cmd

从 PowerShell 和 ISE 运行它:

I am running in explorer

因此,虽然资源管理器不是很有用,但它不是 CMD,我认为这才是您真正想知道的。

关于windows - 查明进程是否正在 cmd.exe 或 PowerShell 窗口中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323938/

相关文章:

powershell - 使用WinSCP将带有百分号的本地文件同步到远程目录时的“No such file or directory”

powershell - 如何增加 VM 上的并发 PowerShell 实例数?

c - Windows CreateProcess 和输出重定向

powershell - 为什么在 PowerShell 中将 PSCustomObjects 转换为带有 DateTime 的自定义类型失败?

regex - 使用“选择字符串”时,RegEx不匹配

windows - 创建新进程后是否需要使用 CloseHandle?

windows - 如何完全离线安装 Chocolatey 包?

c++ - 让两个 dll 共享一个静态库的陷阱是什么?

windows - Chocolatey 升级命令不起作用

c - read() 只从文件中读取几个字节