Powershell 和 cmd 有什么区别?

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

遂查询了下 powershell 和 cmd 的区别,说 powershell 能用 linux 的命令,可以跨平台使用,但是有什么情况需要跨平台使用?在 linux 下用 powershell ?不是很懂。
4655 次点击
所在节点    问与答
28 条回复
Jiajin
2022-05-16 19:28:33 +08:00
powershell 挺强的,但是 linux shell 更顺手
dcsuibian
2022-05-16 20:43:10 +08:00
@gdrk powershell 的转义字符是反引号(`),有没有可能是这个的问题?或者其它语法兼容问题?
我个人遇到的 powershell 出问题的情况有两次,一次是 maven 直接在命令行直接创建项目,一次运行 docker 命令。一直想去学一下 powershell 但没时间。
dcsuibian
2022-05-16 21:14:11 +08:00
用 conda init powershell 应该就好了。
初次接触 powershell 是在校验 iso 文件时,不想下个专门的软件 hash ,于是搜到了 Get-FileHash 命令。从此就没怎么用过 cmd 了。

1 、基本上我就当是个加强版的 cmd 。cmd 太老了,也没在更新,各种功能残缺不全。

2 、用 Linux 的写法是不正确的,因为它实际上还是 powershell 上专有的命令,只不过使用了别名罢了。
Get-Alias ls
Get-Alias rm
你就能看到实际的 powershell 命令了。

3 、不过相比 cmd 而言,powershell 肯定是对 linux 惯用者更友好的。毕竟 cmd 经常会:
'ls' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
cmd 中也没法使用(~)指代家目录。补全功能也弱。

4 、跨平台这个还是不要想了。Linux 和 Windows 差别还是很大的。比如目录的权限信息就不一样。
你搜 powershell 搜到的大部分还是 windows 运维资料,而命令行使用命令的不一定是 shell 自带的,比如 windows 自带 robocopy ,我在 mac 上的装了 powershell 也没法用。Linux 用户基本上不会装 powershell 。所以“跨平台”聊胜于无。

总之你就直接拿来替代掉 cmd 就对了,总比它强。遇到语法不兼容的问题,临时还可以。
> cmd
> 你执行的指令
> exit
这样嘛
dcsuibian
2022-05-16 21:21:19 +08:00
powershell 的跨平台是后来才有的。现在 windows 上预装的 powershell 还是 windows 上专用的,版本应该是 5.x 。(你打开 powershell 应该能看到更新提示)而最新版本应该是 7.2.3 ,是跨平台的。建议使用最新版,至少解压速度快了一些。

可以通过输入
$PSVersionTable
查看版本信息。

为做出区分。一般前者会被称为 windows powershell 。而后者更多用 pwsh 指代。
hengxiangbianhua
2022-05-16 21:26:41 +08:00
可识别的路径不一样。cmd 只认\,powershell 可以识别 /
Buges
2022-05-16 21:43:59 +08:00
@Tumblr 舒服个毛,PowerShell 就是典型的步子迈的太大扯到蛋。看看 elvish/nushell 传统操作系统上的现代 shell 是什么样子的。PowerShell 这么一个 DotNetScript 除非运行在一个完全基于 dotnet 平台构建的操作系统才能名副其实叫 shell 。
msg7086
2022-05-17 02:38:50 +08:00
PowerShell 可以当成一个基于 dotnet/C#的交互 Shell 。
有点像 Python 的交互命令行或者 Ruby 的 IRB 。
(比如你在 IRB 里也可以 mv 'a.txt', 'b.txt' 这样操作嘛。)
不过 PowerShell 特意优化了作为 Shell 的功能,让他可以从 PATH 里直接调用应用程序,又可以用内置的 cmdlet (相当于 cmd 的内置命令)来实现原生调用 dotnet 的功能。

当然反过来说,用起来不如普通的 Shell 那么简洁,要背诵记忆的命令和参数长了很多,和已经熟知的 Linux Shell 相比,需要一定的入门学习时间。

@ladypxy
用 PowerShell 写项目基本相当于用 C#写脚本了,功能当然是 Linux 命令集不能比的。
Tumblr
2022-05-17 11:42:35 +08:00
@Buges #26 扯到蛋可能是因为自己腿短吧。
作为 7 8 年的 PowerShell 使用者,多年游荡于 AD 、Exchange 、Azure 、Microsoft 365 及其它微软系产品之间,我个人觉得 PowerShell 用起来很舒服。

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

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

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

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

© 2021 V2EX