V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pepi
V2EX  ›  程序员

PowerShell 这种强大的命令行工具,为什么使用的人很少?

  •  
  •   pepi · 157 天前 · 10657 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉很少是自身圈子原因。 我个人特别系统使用 WindowsTerminal 中启动 PowerShell ,git 高亮提示使用 starship 但是 powershell 中的很多设定让人吐槽 例如:curl 是个别名,正常使用 curl 这个工具的参数会报错,此时只能灰溜溜的开启 dos 去请求数据。 还有重定向编码为 UTF16 ,设计 UTF8 颇为复杂,为此逛了 StackOverflow 不少帖子

    137 条回复    2022-09-18 13:58:32 +08:00
    1  2  
    respawn
        1
    respawn  
       157 天前
    发力晚
    合适的场景下有更成熟的替代品
    cweijan
        2
    cweijan  
       157 天前
    主要还是不兼容吧, 使用 cmd 的一些常用命令会报错, 学习成本高, 启动又慢..
    AllenHua
        3
    AllenHua  
       157 天前
    大多数人习惯的是 Linux 命令行终端,对 Linux 各种命令熟悉一些。

    有一说一,你这正文并没有让人感受到 PowerShell 有多强大……
    jim9606
        4
    jim9606  
       157 天前
    主要是这玩意绝大多数时候等于 windows 限定,尽管现在跟着.NET 一起跨平台了,winserver 这边运维一般用 GUI 或者 WinRM ,powershell 不是必须,如果自动化的事情涉及复杂结构化消息处理,用 python 更主流一些。

    至于 curl 问题,还是挖墙脚意味居多,换成 curl.exe 就是,正经 ps 脚本用 Invoke-WebRequest 不用别名。
    musi
        5
    musi  
       157 天前
    你这贴的内容并没有让我觉得 PowerShell 很强大,甚至让谁给我觉得 PowerShell 有很高的上手成本,有这时间我直接用 linux 的命令行不香么,学完了还能干点运维的活
    zhuangzhuang1988
        6
    zhuangzhuang1988  
       157 天前
    自带微软原罪.
    liuxu
        7
    liuxu  
       157 天前
    有点去重庆开火锅店的意思
    pepi
        8
    pepi  
    OP
       157 天前
    @musi 但是的确很强大
    Damn
        9
    Damn  
       157 天前
    @zhuangzhuang1988 ms 的东西对 linux 用户来说就是中世纪的 witch 。。
    germain
        10
    germain  
       157 天前
    PowerShell 使用的人很多,但不是搞开发的在用。大多数场景都是 infra,devops 在用。
    chengliang
        11
    chengliang  
       157 天前
    因为没有环境吧,我们公司的工具都是基于 powershell 的,所以反而用 bash 的很少
    pluvet
        12
    pluvet  
       157 天前   ❤️ 1
    太难用了……
    wxf666
        13
    wxf666  
       157 天前   ❤️ 1
    @pepi 相比 bash 等 shell ,powershell 交互使用稍显繁琐吧(命令太长了?)

    写脚本应该比 bash 强。但这方面 python 也很强

    我没搞懂 powershell 定位
    pepi
        14
    pepi  
    OP
       157 天前
    @wxf666 如此看来,定位确实很尴尬
    wxf666
        15
    wxf666  
       157 天前
    @chengliang 想问一下,你们以交互式使用 powershell 多吗?还是多作为脚本使用?
    vanton
        16
    vanton  
       157 天前
    相对 linux 和 bsd 下的各种 sh ,powershell 太难用了。
    配置也很麻烦,各种支持还很初级。
    wdhwg001
        17
    wdhwg001  
       157 天前   ❤️ 72
    Because-I-Believe-PowerShell-Commands-Are-Way-Too-Long-And-Unnecessarily-Verbose-That-I-Definitely-Hate-To-Type-Any-Of-Them-For-The-Sake-Of-My-Finger-Health-And-Keyboard-Durability
    iloveayu
        18
    iloveayu  
       157 天前
    不搞 Windows 相关就远离这玩意,如果是桌面操作系统用,用户操作层面的那种用到什么查什么就完事儿。
    干活儿还是 unix 那套通用性强。
    lovepplforever
        19
    lovepplforever  
       157 天前 via iPhone
    不好用
    zhangxzh
        20
    zhangxzh  
       157 天前 via Android
    命令太长不好记
    makelove
        21
    makelove  
       157 天前   ❤️ 4
    powershell 这种东西一看风格就是太微软了,笨重油腻全都要的感觉。你要说比 bash 强大么是的,但命令行设计方便使用是首位,至于强大脚本功能复杂了谁还用 shell 脚本语言写
    Bingchunmoli
        22
    Bingchunmoli  
       157 天前 via Android
    很强但学习成本高
    xyjincan
        23
    xyjincan  
       157 天前 via Android
    丑拒
    dingwen07
        24
    dingwen07  
       157 天前 via iPhone
    作为 shell 太麻烦
    scripting ?那我为什么不用 python
    Helsing
        25
    Helsing  
       157 天前 via iPhone
    因为难用,会用命令行的用 bash 不香吗,干嘛要用 PowerShell ,而且它的反斜杆和 bash 是反的,看着难受,用着也难受。敲命令反斜杆老是敲错,然后看着爆错信息改,难用的一批。
    sutra
        26
    sutra  
       157 天前
    @wdhwg001 真相了,太形象了吧也。
    cnbatch
        27
    cnbatch  
       157 天前
    小提示,在 PowerShell 7.x ,curl 和 wget 已经不再是 Invoke-WebRequest 的别名了。
    ColorfulBoar
        28
    ColorfulBoar  
       157 天前 via iPhone   ❤️ 6
    有人喷了 10 年命令长都不愿意花 3 秒(其中 67.8%的时间用于启动 PowerShell )输入一次 ls 试试(与此同时跟它说 git 设计得蠢就嘲笑你连 alias 都不会设置)
    有人喷了 10 年 Windows 文件名不区分大小写,却坚信 PowerShell 命令是大小写敏感的
    所以你觉得这玩意用的人少跟技术有 1%的关系?
    873792861
        29
    873792861  
       157 天前
    在 windows 写 powershell 脚本很多时候要引用.net 的东西才能完成功能,比如截屏,所以稍微复杂的东西还是使用 python 比较方便,毕竟有很多便利的库。
    wxf666
        30
    wxf666  
       157 天前
    @ColorfulBoar 你能给出一些交互式下,大家常用的,powershell 明显比 bash 短的例子吗?
    dcsuibian
        31
    dcsuibian  
       157 天前
    因为用 Linux 不得不学 shell ,而用 Win 用图形化界面直接上手
    所以熟悉命令行的,熟悉的是 Linux 的 shell ,而不是 Windows 的 shell
    dcsuibian
        32
    dcsuibian  
       157 天前
    shell 和操作系统高度绑定
    在 win 下直接用 linux 的做法经常会很难受的,劝你还是老老实实学两套
    ronman
        33
    ronman  
       157 天前 via Android
    @xyjincan 虽然但是 shell 和 terminal 是两种东西吧
    ysc3839
        34
    ysc3839  
       157 天前 via Android
    我自己选择 MSYS2+zsh ,主要是不想学两套东西,以及 Unix shell 的各种命令普遍较短,好记。
    statumer
        35
    statumer  
       157 天前   ❤️ 17
    @ColorfulBoar
    创建个符号链接应该怎么做来着,New-Item -Type SymbolicLink -Path \a\b\c\d -Target \e\f\g\h ,在 bash 里只需要 ln -s foo bar, 怎么回事呢?
    想 grep 过滤下输出该怎么做来着, | Out-String -stream | Select-String -Pattern "foo"
    更别提 Windows 到现在还没有个能用的包管理器,win-get 和 apt 比起来是个残废,让社区很难贡献命令行工具所以生态极烂
    有没有一种可能是 Powershell 真的很难用,而不是因为大伙都是低水平程序员迫害你的 ps 哥哥呢?
    PrinceofInj
        36
    PrinceofInj  
       157 天前 via Android
    @statumer bash 里面打的字比实际上 PS 里面打的字少不了多少。PS 按 tab 都补全了,如果在 vscode 里面用的话需要打的字更少。可能就比 bash 多四五个字母。bash 等学习成本太高,经常遇到不太熟悉的就得查一下应该怎么做。ln 是啥意思? ls 是啥意思?为啥有些系统还能打个 ll 出来? du 是啥意思?为啥 dd 又完全跟 du 不是一码事儿呢?那 df 跟他俩又有啥关系?
    wxf666
        37
    wxf666  
       157 天前   ❤️ 1
    @PrinceofInj 是这样吗?(我用 35 楼的试试)

    1. 软链接

    - `new-it<tab> -t<tab> s<tab> -t<tab> foo -p<tab> bar`(按 30 次)
    - `ln -s foo bar`( 13 )

    2. 过滤

    - `| out-s<tab> -<tab> | sel<tab>-s<tab> -<tab> foo`( 28 )
    - `| grep foo`( 10 )
    geelaw
        38
    geelaw  
       157 天前   ❤️ 3
    @statumer
    @wxf666
    #35 #37

    New-Item -Type SymbolicLink -Path foo -Target bar
    的可能缩写是
    ni -ty s foo -ta bar

    我不太确定为什么你想要把对象转换为字符串再过滤,这样会丧失很多数据。

    过滤字符串可以缩写为

    |sls foo

    当然你也可以用 grep 和 find ,都是 Select-String 的意思。

    过滤对象可以缩写为

    |? 条件

    你也可以用 where 。

    当然,好的品位是不去比较这种天花乱坠的写法。另外 grep (可执行文件)和 ln (可执行文件)都不是 shell/bash 的一部分。
    wanacry
        39
    wanacry  
       157 天前 via iPhone
    名字很强大
    wxf666
        40
    wxf666  
       157 天前   ❤️ 1
    @geelaw 我不熟悉 powershell ,只是印象中命令都很长

    所以直接拿 35 楼的命令,在 powershell 一点点试哪里可以 <tab>

    如果都像你说的这么简短,倒真的可以试着学学


    > 好的品位是不去比较这种天花乱坠的写法

    我认为 交互式 shell 应该怎么简洁快速怎么来。脚本才重视可读性


    > 另外 grep (可执行文件)和 ln (可执行文件)都不是 shell/bash 的一部分

    这应该是 Linux 的哲学,一个 shell 就该当好用户与系统交互、胶水语言的角色,不是由它实现所有功能
    hez2010
        41
    hez2010  
       157 天前 via Android   ❤️ 2
    @statumer 你这举的例子跟 bash 有啥关系啊,只是在调用系统里的可执行文件而已。
    Linux 上用 PowerShell 照样可以直接 ln -s foo bar 和 grep
    Howlaind
        42
    Howlaind  
       157 天前 via Android   ❤️ 2
    @873792861 为什么 PowerShell 引用 .Net 库是不方便,而 Python 引用库就是方便呢?
    jedihy
        43
    jedihy  
       157 天前
    devops 领域用的不少吧。至少我们组维护的 msquic 就在用 powershell 来跑跨平台的 CI/CD 。
    zhuangzhuang1988
        44
    zhuangzhuang1988  
       157 天前   ❤️ 3
    @Damn 就说微软自带原罪了, powershell 对我来说 最大好处不是自动补全, 不是面向对象, 而是可以单步调试, 好几次运行别人的 shell 抓瞎 要么就 echo 大法.
    powershell 就直接断点调试就好了
    l4ever
        45
    l4ever  
       157 天前
    还不如砍掉学 linux 直接用 python
    非要自己搞个 shell, 忒
    YepTen
        46
    YepTen  
       157 天前
    因为用不到,用到了自然就去学了。不搞 IT ,谁闲的去学 Linux 。
    Cbdy
        47
    Cbdy  
       157 天前 via Android
    其实并不强大
    userforg2021
        48
    userforg2021  
       157 天前
    @hez2010 虾仁猪心!虾仁猪心!
    Dragonphy
        49
    Dragonphy  
       157 天前
    命令太 TM 长了,谁记得住啊
    sjzjams
        50
    sjzjams  
       157 天前
    @respawn 会不会是你不用??
    zjqzxc
        51
    zjqzxc  
       157 天前
    如果拿 powershell 与 python 、bash 比较的话,我个人觉得它更接近 python 而不是 bash 。但是目前的问题是,调用 dot net 组件的文档太匮乏了。前段时间拿 poweshell 调用 dot net 的组件写了个 GUI 程序,官方文档都找不到;当然也有好处,用户可以直接看到源码避免终端用户不信任二进制文件;以及可以在终端用户电脑上直接修改程序而不用安装开发环境
    thetbw
        52
    thetbw  
       157 天前
    因为我真的是只用个命令?
    Narcissu5
        53
    Narcissu5  
       157 天前
    @PrinceofInj 有没有想过 oh-my-zsh 有更强大的自动补完,有没有想过 ps 的脚本阅读性极差,有没有想过基于.net 的 ps 自己把路走窄了
    weivi
        54
    weivi  
       157 天前
    割裂感
    66beta
        55
    66beta  
       157 天前
    你说他是命令行,那我只能说难用的一比,正常人都会用 Windows Terminal+WSL

    如果你说他是一套 windows 官方的工具,那么我没资格发言
    dousha99
        56
    dousha99  
       157 天前
    因为在管道中传递的是对象而不是文本流,这点就让人感觉很不安。对于熟悉旧一套命令行(无论是 cmd 也好还是 *nix 下的 shell 也好)对文本流进行操作的人而言,这反而是增加了心智负担。

    毕竟 shell 的核心用途就是粘东西。如果说 *nix 下的各种 shell 是各种品牌的强力胶;那么 PowerShell 就是量子粘合机(不)。后者或许确实比点胶水来得更快更牢固,但是它也带来了更复杂的概念和操作方式。或许确实有一些需求就是需要粘合机来搞定,但大多数场景下,点一点 502 足矣。
    lovedebug
        57
    lovedebug  
       157 天前
    我们做的 office365 平台上的产品,用 powershell 比较多,确实很强大
    james122333
        58
    james122333  
       157 天前
    @zhuangzhuang1988

    shell 可以单步调试 前提有一定理解
    allgy
        59
    allgy  
       157 天前
    因为废话多,用来起罗嗦
    fpure
        60
    fpure  
       157 天前
    对于 shell 来说命令太长了
    salmon5
        61
    salmon5  
       157 天前
    根本原因是价值不大,面试不面这个
    libook
        62
    libook  
       157 天前
    普通用户来说:
    Windows 的看家本领就是可视化操作,本身已经能覆盖大多使用场景了,只有可视化满足不了的才会考虑用指令。
    另外很多流行的指令工具都是面向 Linux/Unix 来开发的,虽然不少可以移植到 PowerShell 里,但可能会和主流用法有区别。
    再加上 WSL 搞得挺好了,不是必须用 PowerShell 的话我一般会用 WSL 。

    专业的 Windows 运维者来说:
    其实已经在高效利用 PowerShell 的,只不过比较低调而已。
    newmlp
        63
    newmlp  
       157 天前
    @wxf666 你这 bash 就是调用了个可执行程序,ps 在 Linux 也能这么调用可执行程序啊
    wenzhoou
        64
    wenzhoou  
       157 天前
    shell 调试用 set -x
    习惯还挺好用
    codingBug
        65
    codingBug  
       157 天前 via Android
    那我借这里分享一个 powershell 插件吧

    https://github.com/aliuq/Register-Completion
    TcDhl
        66
    TcDhl  
       157 天前
    有一堆日常的固定命令, 日常连七八台服务器操作
    用" PowerShell 这种强大的命令行工具 "怎么不上火
    Torpedo
        67
    Torpedo  
       157 天前
    想起来昨天在知乎上看到的一个回答: https://www.zhihu.com/question/20619659/answer/2650127578
    Curtion
        68
    Curtion  
       157 天前
    太长了
    wxf666
        69
    wxf666  
       157 天前
    @newmlp 那我为何不直接用自带的 bash zsh ,而要去安装个 ps 再打同样的命令呢?

    现在就是在问,ps 对于交互式操作,自身的什么优越性,起到了什么明显的优化作用,以至于能甩 bash zsh 几条街?
    bleaker
        70
    bleaker  
       157 天前
    我写 shell 不是图它功能强,而是图它一简单方便随便造,二分部广泛兼容好。真的需要很复杂脚本的场景,Python/Ruby 乃至这几年的 Node 都是很好的选择

    Powershell 两点好处都不占,就算不考虑 MS 背景,也不会火的
    iSecret
        71
    iSecret  
       157 天前
    每次是用 Power Shell 格外的出戏。
    bzw875
        72
    bzw875  
       157 天前
    我们公司内部电脑禁止了 powershell
    nothingistrue
        73
    nothingistrue  
       157 天前
    Powershell 跟 shell 的区别,与 Java 和 Javascript 的区别类似。一有门槛不是你想用就能用的。二真得大多数场景下没必要用。三最要命,等你达到了门槛,并且还有需要的场景的时候,Python 比 Powershell 更好用。
    ZRS
        74
    ZRS  
       157 天前 via iPhone
    codingBug
        75
    codingBug  
       157 天前 via Android
    我发现好多人对 powershell 有误解,再说一些,我本机用 powershell ohmyposh ,服务器用 zsh ohmyzsh ,目前来看,两者日常体验基本可以达到一致

    https://zhuanlan.zhihu.com/p/537991323
    jiejiss
        76
    jiejiss  
       157 天前 via Android
    @zhuangzhuang1988 在 VSCode 里,同样有给 bash 下断点 /单步调试的插件。
    zhuangzhuang1988
        77
    zhuangzhuang1988  
       157 天前
    @jiejiss 好吧知识落伍了我学习的时候没有
    powershell 开始伴随着 系统发布时候就自带了 ise 可以调试 自带自动补全
    brucmao
        78
    brucmao  
       157 天前
    @codingBug ohmyposh 启动有点慢,我换 https://starship.rs/
    weak
        79
    weak  
       157 天前 via iPhone
    命令行太长了 记不住
    Felldeadbird
        80
    Felldeadbird  
       157 天前
    all in win 其实 powershell 挺好用。但是在命令行便利上,没有做到 linux 和 macos 的舒服。我觉得更重要是一个操作系统带两套命令行的玩意,是不是有点不好? cmd 和 powershell 。
    lxml
        81
    lxml  
       157 天前
    开局输给了 linux 的 bash 就是原罪,微软出品更是原罪
    codingBug
        82
    codingBug  
       157 天前
    @brucmao starship 好像看起来很棒
    MonoLogueChi
        83
    MonoLogueChi  
       157 天前 via Android
    虽然我一直在用 powershell ,但是我不推荐别人去用。先说这玩意强,确实强,必须先吹一波管线和类型,powershell 是有类型的,而不是像其他 shell 一样,只是字符串,这个东西用过才能理解。
    再说为啥不推荐别人用,先说从 powershell 本身来说,Windows ,混乱,先有 cmd ,再有 windows powershell(5),还有 powershell core(6 7),而且这 3 个东西还必须共存,有些东西不通用,没有相关经验的话,根本搞不清什么时候该用哪个。linux ,需要额外安装 powershell 。再来说 powershell 语法,前面也说了这玩意强,但是强是有代价的,命令多,语法复杂,而且是有类型的,这样就造成了一个问题,简单命令也会特别长,特别啰嗦,如果不能理解 powershell 的设计理念,入门就会非常难
    AoEiuV020CN
        84
    AoEiuV020CN  
       157 天前
    总是给我“不好用”的感觉,
    cmd 能解决的还是优先 cmd ,
    datou
        85
    datou  
       157 天前
    powershell 最扯淡的是很多大驼峰命令
    lolizeppelin
        86
    lolizeppelin  
       157 天前
    @MonoLogueChi

    shell 搞那么复杂还不如用正儿八经的编程语言......powershell 这种不上不下的非常尴尬
    除非要用什么 windows 相关接口 python 写起来太麻烦..否则不如写 python.
    tankren
        87
    tankren  
       157 天前
    要么 bat 要么 python 吧
    nicevar
        88
    nicevar  
       156 天前
    主要是 psh 没有太好的被迫学习环境,不像 bash ,熟悉 linux 必须得学,用 MacOS 装逼也得学,但是用 Windows 大多情况用 bat 就行了,psh 就没什么太大必要。
    laqow
        89
    laqow  
       156 天前
    设计个语言完全不考虑打字方不方便,大部分右键需要解决的问题 cmd 就能解决的,系统很霸道地把 shift 右键的 cmd 换成 powershell
    cosette
        90
    cosette  
       156 天前
    出现的晚了,“命令行”跟*nix 就和“图形界面”跟 windows 一样,硬要说 win 上的命令行,普及度更广的应该是批处理,也是靠各种脚本流行的。

    因此即便在 linux 上用命令行完成某些事情要一长串让人眩晕的管道命令,但大家已经学会了忍受,因为你用不好是你学艺不精。举例来说,在 linux 上的各种命令里使用 正则表达式 就让人头疼甚至心生恐惧,书写风格都不是统一的,捕获分组到底是 `()` 还是 `\(\)` ,哪些情况下要转义,让人迷惑。但你不能抱怨这些,因为从历史考察某些命令工具可能比很多人出生的要早,已经有极多的用户,从另一个层面来讲,*nix 有极浓的 geek (工程师)文化,“你要是觉得不好用,你自己去写一个工具”,这源自于*nix 社区在极早期发展的时候的文化,所以大家热衷于写各种脚本,造各种轮子,一方面锻炼自己的能力融入这个“geek”文化圈子,另一方面也是在方便自己。

    说回 powershell ,完成某些任务确实很方便,而且命令、参数的语义性很强(看起来很长),但网上没那么多的轮子,如果某项工作有其他熟悉的替代方案,那懒得去学。
    mijazz
        91
    mijazz  
       156 天前
    拖 OP 的福, 我今天安装了个 powershell 7

    像#30 - #41 左右讨论的一样, powershell 自己的 cmdlet 不可以说设计得不好, 是我的思维已经被 `bash` 或者 `zsh` 这些同类固化了.

    我不会想着进目录就 Get-Children, 虽然他也有`ls`的 alias, 但是写 Script 还是得用全称.

    我感觉下来没什么可以吐槽的点, 毕竟也是个啥都能干的 shell, 但是它自带的 alias 也太奇怪了, Get-Children -> `dir`, `ls`我都能理解, 两个兼容性的字段, 但是`gci`是什么操作...不应该是`gcd`才顺口嘛...

    [cmdlet alias 对照]( https://www.pdq.com/powershell/)
    stoluoyu
        92
    stoluoyu  
       156 天前
    大部分用命令行的人肯定要会用 linux ,没动力再学一套语法了,我也就用到的时候偶尔现查一下。
    Slurp
        93
    Slurp  
       156 天前
    作为一个日常使用的 Shell ,先把启动速度弄好再说吧。

    我 Zsh 装一堆插件照样可以 0.09 秒启动。PowerShell 上来就 2 秒。
    rrZ2C
        94
    rrZ2C  
       156 天前
    我是因为以前工作环境已 Linux 为主, 习惯了

    我看其他同事也更是无所谓 cmd 还是 window terminal
    11232as
        95
    11232as  
       156 天前
    习惯了 UNIX 那套思想后用不习惯 powershell
    rming
        96
    rming  
       156 天前
    我能问下我这个是怎么回事么?虽然我不用
    ryansvn
        97
    ryansvn  
       156 天前
    @cweijan 对,很多 cmd 的命令参数都不支持,老是报错,就很讨厌了
    yanue
        98
    yanue  
       156 天前
    跟 linux shell 不是一个级别的
    WOLFRAZOR
        99
    WOLFRAZOR  
       156 天前
    没力气再学多一套了(用到再现查指南),习惯了 UNIX 的 terminal 之后用这个很不习惯
    tanek
        100
    tanek  
       156 天前
    @ColorfulBoar 可能是还在找上一次打开窗口的 history 呢。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1444 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 05:26 · PVG 13:26 · LAX 21:26 · JFK 00:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.