V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
erquren
V2EX  ›  问与答

Powershell 和 cmd 有什么区别?

  •  
  •   erquren · 44 天前 · 3085 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在用 pycharm 的时候发现 terminal 无法自动匹配 conda 环境,因为新版本的 pycharm 默认使用 powershell 作为终端环境了,无法初始化 conda ,切换为 cmd 后解决问题

    遂查询了下 powershell 和 cmd 的区别,说 powershell 能用 linux 的命令,可以跨平台使用,但是有什么情况需要跨平台使用?在 linux 下用 powershell ?不是很懂。
    28 条回复    2022-05-17 11:42:35 +08:00
    villivateur
        1
    villivateur  
       44 天前
    “powershell 能用 linux 的命令”是在瞎说,最多也就几个命令如 ls 之类的与 Linux 类似而已。

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

    奇怪的用法参见 https://www.v2ex.com/t/828462
    eason1874
        4
    eason1874  
       44 天前   ❤️ 2
    cmd 在 windows nt 最早的 shell ,从 dos 时代过来的,比较简陋

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

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

    powershell 是可以跨平台的,不过不是跟 unix shell 通用,是巨硬开源了在各大系统的运行环境,在 Linux 上使用得先安装环境。估计主要是 Azure 用户在用跨平台环境吧,库下载排行榜上好几十个是 Az. 开头
    Tumblr
        10
    Tumblr  
       44 天前
    @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
        11
    eason1874  
       44 天前
    @Tumblr 明白你的意思,我知道这个发展背景,我的意思是 powershell 接替 cmd 发展 Windows 的 shell ,不是指替换掉 cmd

    按 Windows 的兼容习惯,cmd.exe 再过 20 年可能都还在,巨硬连 Windows 11 edge 的 ie 模式都承诺至少兼容到 2029
    seeyisee
        12
    seeyisee  
       43 天前
    比如你输入 pin 然后按 tab 补齐,他俩补齐的内容不一样。powershell 补齐的更丰富。
    flynaj
        13
    flynaj  
       43 天前 via Android
    powershell 是构建在.net 上面的,功能多,直接调用.net.不过不是每个系统上都有。cmd 所有 Windows 系统上都有。
    Moha
        14
    Moha  
       43 天前
    前几天我测试我的问题的时候,个别任务,cmd 运行成功,powershell 却失败,离谱
    ladypxy
        15
    ladypxy  
       43 天前
    powershell 很强大...比所谓的 linux 命令强大的多。。。我用这玩意写过监控系统。。
    gdrk
        16
    gdrk  
       43 天前
    想知道为啥 powershell 不完全兼容 cmd 的命令啊,前段时间用了 del 命令,cmd 正常执行,powershell 一直报参数错误。
    Howlaind
        17
    Howlaind  
       43 天前 via Android
    @gdrk 因为本来就没打算兼容呀
    systemcall
        18
    systemcall  
       43 天前 via Android
    @gdrk 因为本来就只是别名,不是那些命令
    ls 和 dir 在 PowerShell 里是等价的,都是 Get-ChildItem 的别名
    当然如果那个命令是运行了 PATH 环境变量下的程序的话,你会发现基本上是通用的,你在 Windows 下运行 bash 也可以执行那些程序。当然,参数之类的交互上会有一些区别
    haah
        19
    haah  
       43 天前
    名字不一样!
    bytesfold
        20
    bytesfold  
       43 天前
    只知道 powershell 很牛逼
    Jiajin
        21
    Jiajin  
       43 天前
    powershell 挺强的,但是 linux shell 更顺手
    dcsuibian
        22
    dcsuibian  
       43 天前
    @gdrk powershell 的转义字符是反引号(`),有没有可能是这个的问题?或者其它语法兼容问题?
    我个人遇到的 powershell 出问题的情况有两次,一次是 maven 直接在命令行直接创建项目,一次运行 docker 命令。一直想去学一下 powershell 但没时间。
    dcsuibian
        23
    dcsuibian  
       43 天前
    用 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
        24
    dcsuibian  
       43 天前
    powershell 的跨平台是后来才有的。现在 windows 上预装的 powershell 还是 windows 上专用的,版本应该是 5.x 。(你打开 powershell 应该能看到更新提示)而最新版本应该是 7.2.3 ,是跨平台的。建议使用最新版,至少解压速度快了一些。

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

    为做出区分。一般前者会被称为 windows powershell 。而后者更多用 pwsh 指代。
    hengxiangbianhua
        25
    hengxiangbianhua  
       43 天前 via Android
    可识别的路径不一样。cmd 只认\,powershell 可以识别 /
    Buges
        26
    Buges  
       43 天前 via Android
    @Tumblr 舒服个毛,PowerShell 就是典型的步子迈的太大扯到蛋。看看 elvish/nushell 传统操作系统上的现代 shell 是什么样子的。PowerShell 这么一个 DotNetScript 除非运行在一个完全基于 dotnet 平台构建的操作系统才能名副其实叫 shell 。
    msg7086
        27
    msg7086  
       43 天前
    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
        28
    Tumblr  
       43 天前
    @Buges #26 扯到蛋可能是因为自己腿短吧。
    作为 7 8 年的 PowerShell 使用者,多年游荡于 AD 、Exchange 、Azure 、Microsoft 365 及其它微软系产品之间,我个人觉得 PowerShell 用起来很舒服。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4248 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 06:33 · PVG 14:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.