windows - 如何检测来宾 Windows 解释器:cmd 或 powershell?
问题描述
我正在开发一个 go CLI 工具,它可以在不同的操作系统中触发终端命令。
我对 Windows 10 不太了解,所以我会问你这个基本问题:如何检测我的二进制文件在哪种 Windows shell 上运行?(cmd或powershell)。
我想知道通过读取环境变量是否可行。
我可以看到一组潜在的候选人,特别是PSSessionOption
和PSSesionConfigurationName
。
在 cmd 方面,有SESSIONNAME
and ComSpec
。
- 这些是检测windows shell类型的好环境变量吗?
- 或者它们经常被其他应用程序覆盖?
- 您能否为此目的建议我任何其他替代环境变量?
- 作为后备,是否有任何其他方法可以识别 Windows 中的主机外壳类型?
解决方案
这对我有用:
package main
import "os"
func main() {
if os.Getenv("PROMPT") != "" {
println("Command Prompt")
} else {
println("PowerShell")
}
}
或这个:
if _, ok := os.LookupEnv("PROMPT"); ok {
虽然,正如其他人所说,这可能不是一个好主意,不管你想做什么。无论您尝试编写什么.bat
或.ps1
脚本,您都可以直接使用 Go 来完成。Go 程序对您的系统的访问权限与其他类型几乎相同。
推荐阅读
- assembly - nasm 代码调用 scanf 崩溃取决于堆栈大小
- python - 使用pyinstaller打包selenium程序
- c# - C# ASP.NET MVC - 如果在 id 下缺少任何索引值,则动态添加文本框未绑定
- antd - TreeNode AntDesignPro 上的自定义工具提示
- git - 如何禁用每个 repo 的 GPG 签名
- excel - Oracle (ODBC) - excel 连接
- javascript - 谁能帮我如何使用ngrx本地存储来加密和解密数据
- reactjs - Asp.Net Core Web API 中的 JWT 令牌授权
- mule - MULE - 从应用程序属性和 VM 参数更改变量的优先级
- google-maps - 在片段内显示谷歌地图