Powershell 和 cmd 有什么区别?

2022-05-16 10:02:03 +08:00
 erquren
最近在用 pycharm 的时候发现 terminal 无法自动匹配 conda 环境,因为新版本的 pycharm 默认使用 powershell 作为终端环境了,无法初始化 conda ,切换为 cmd 后解决问题

遂查询了下 powershell 和 cmd 的区别,说 powershell 能用 linux 的命令,可以跨平台使用,但是有什么情况需要跨平台使用?在 linux 下用 powershell ?不是很懂。
4981 次点击
所在节点    问与答
28 条回复
villivateur
2022-05-16 10:05:02 +08:00
“powershell 能用 linux 的命令”是在瞎说,最多也就几个命令如 ls 之类的与 Linux 类似而已。

powershell 与 cmd 的区别就是,它们是两个不同的命令行环境,就跟 bash 和 zsh 的区别一样,只不过它们都能跑在 Windows 上而已。
dreasky
2022-05-16 10:09:47 +08:00
建议直接用 wsl
yaoyao1128
2022-05-16 10:18:45 +08:00
powershell 的.net 构建的 cmdlet 的话很多别名是和 unix shell 与 cmd 兼容 但是本身的 cmdlet 更偏向自然语言
基于.net 让 ps 多了很多功能与能力 也有很多奇奇怪怪的用法
一定程度上可以说没有 powershell 的话,win server core 和当年的 iot 版本都不会出现

奇怪的用法参见 https://www.v2ex.com/t/828462
eason1874
2022-05-16 10:51:43 +08:00
cmd 在 windows nt 最早的 shell ,从 dos 时代过来的,比较简陋

后来新出 powershell 接替 cmd ,两者区别大概有 ie 和 edge 那么大
lithiumii
2022-05-16 10:53:30 +08:00
初始化 conda 只要跑到 conda 那个文件夹里手动运行一下 init 就可以了吧
creanme
2022-05-16 11:06:34 +08:00
“powershell 能用 linux 的命令” 只是因为 powershell 官方内置了少量的 alias ,比如 ls 是 Get-ChildItem 的 alias 。
erquren
2022-05-16 11:16:38 +08:00
@lithiumii pycharm 会自动在终端初始化 conda 环境,在 cmd 下可以,ps 下就不行,不知道是不是权限问题

@eason1874 不知道是老款 edge 还是 chrome 内核的 edge
wangsyi13
2022-05-16 11:32:24 +08:00
@erquren 是不是 ps 的执行脚本权限没开
eason1874
2022-05-16 11:57:08 +08:00
@erquren 那肯定是 chrome 同款内核的 edge ,区别才够大。powershell 已经超越壳的功能了,有 .net 环境,我看到好些人拿它当 python 用,开本地 http server 、处理图片什么的

powershell 是可以跨平台的,不过不是跟 unix shell 通用,是巨硬开源了在各大系统的运行环境,在 Linux 上使用得先安装环境。估计主要是 Azure 用户在用跨平台环境吧,库下载排行榜上好几十个是 Az. 开头
Tumblr
2022-05-16 13:20:19 +08:00
@eason1874 #4 啊。。。无意冒犯但这个是典型的以讹传讹的传言,PowerShell 的出现本来就没有取代 cmd 的意思。当年 Jeffrey Snover 想在 Windows 上弄套 Unix 工具,但是后来发现这玩意儿行不通,然后就半路改道,单独弄了一套东西出来,就是后来的 Windows PowerShell 。
只是 PowerShell 这东西和 cmd 同在 Windows 上,并且 PowerShell 感觉更 morden ,所以微软也在倾向于把 PowerShell 做成默认,作为 cmd 的升级了,然后上就让人觉得当初 PowerShell 的出现是为了替换掉 cmd 。
其实我觉得这是个好现象,反正 CLI 的东西本来也不是给普通用户的,对于 IT Pros 来说,用一个更现代的 shell 确实比折腾 cmd 里的字符串要舒服太多太多了。
eason1874
2022-05-16 14:30:41 +08:00
@Tumblr 明白你的意思,我知道这个发展背景,我的意思是 powershell 接替 cmd 发展 Windows 的 shell ,不是指替换掉 cmd

按 Windows 的兼容习惯,cmd.exe 再过 20 年可能都还在,巨硬连 Windows 11 edge 的 ie 模式都承诺至少兼容到 2029
seeyisee
2022-05-16 14:38:55 +08:00
比如你输入 pin 然后按 tab 补齐,他俩补齐的内容不一样。powershell 补齐的更丰富。
flynaj
2022-05-16 14:40:06 +08:00
powershell 是构建在.net 上面的,功能多,直接调用.net.不过不是每个系统上都有。cmd 所有 Windows 系统上都有。
Moha
2022-05-16 14:42:55 +08:00
前几天我测试我的问题的时候,个别任务,cmd 运行成功,powershell 却失败,离谱
ladypxy
2022-05-16 14:50:08 +08:00
powershell 很强大...比所谓的 linux 命令强大的多。。。我用这玩意写过监控系统。。
gdrk
2022-05-16 15:30:23 +08:00
想知道为啥 powershell 不完全兼容 cmd 的命令啊,前段时间用了 del 命令,cmd 正常执行,powershell 一直报参数错误。
Howlaind
2022-05-16 15:50:05 +08:00
@gdrk 因为本来就没打算兼容呀
systemcall
2022-05-16 18:11:27 +08:00
@gdrk 因为本来就只是别名,不是那些命令
ls 和 dir 在 PowerShell 里是等价的,都是 Get-ChildItem 的别名
当然如果那个命令是运行了 PATH 环境变量下的程序的话,你会发现基本上是通用的,你在 Windows 下运行 bash 也可以执行那些程序。当然,参数之类的交互上会有一些区别
haah
2022-05-16 18:13:10 +08:00
名字不一样!
bytesfold
2022-05-16 18:38:11 +08:00
只知道 powershell 很牛逼

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX