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

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

  •  
  •   pepi · 2022-08-30 22:15:53 +08:00 · 14587 次点击
    这是一个创建于 805 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    137 条回复    2022-09-18 13:58:32 +08:00
    1  2  
    FengMubai
        101
    FengMubai  
       2022-08-31 18:35:28 +08:00
    内嵌命令不好记, 参数格式不统一
    blankmiss
        102
    blankmiss  
       2022-08-31 18:57:41 +08:00
    @rming 为什么你这个还带¥
    cnbatch
        103
    cnbatch  
       2022-08-31 19:03:50 +08:00
    jousca
        104
    jousca  
       2022-08-31 19:11:51 +08:00
    不好用,原因就是命令太长了,又多又长. 不是很好用。
    documentzhangx66
        105
    documentzhangx66  
       2022-08-31 19:32:26 +08:00   ❤️ 2
    1.楼上很多小伙伴,一看就很不严谨。
    New-Item -Type SymbolicLink -Path foo -Target bar
    这种设计,明显要比
    ln -s foo bar
    好得多。
    因为前者能让你清楚地知道,你在干嘛。

    我在 linux 里使用 verbose 参数,我都不会用 -v ,而是使用 --verbose 。因为前者在某些环境下,有可能是 version ,而后者一定是 verbose 。


    2.PS 强大,但为什么用的人少,因为 Windows 本来就不是一个命令行的系统,而且 Windows 下面很多软件的设计都遵循这个结果。真正想用命令行的,都去用 linux 了。
    reallittoma
        106
    reallittoma  
       2022-08-31 20:23:56 +08:00
    @blankmiss #102 应该是日文系统
    reallittoma
        107
    reallittoma  
       2022-08-31 20:25:42 +08:00
    @documentzhangx66 #105 Linux 的缩写习惯,明明是时代的限制,后来大家反而认为它是一种优势
    geelaw
        108
    geelaw  
       2022-09-01 00:34:40 +08:00
    @mijazz #91 你想说的或许是 Get-ChildItem ,然后 gci 显然是三个单词的首字母,绝大多数情况 cmdlet 后面的名词是单数,除非结果 /目标一定是多个对象的时候,以及除了复数单词更常见的时候(比如是 ...Data 而不是 ...Datum )。
    mijazz
        109
    mijazz  
       2022-09-01 09:51:41 +08:00
    @geelaw #108

    噢对, 没留意到是`Get-ChildItem`, 这么一来就行得通了.

    @documentzhangx66 #105

    这个说法我很赞同, 在给参数的时候我也会给全, 特别是写 Script 的时候.
    ps 这碗饭我咽不下的地方在于大写和`-`的结合, 确实是个人习惯问题
    marcong95
        110
    marcong95  
       2022-09-01 10:29:05 +08:00
    对于主要在 windows 下开发的,偶然需要写个小脚本辅助一下的场景,我是觉得确实挺 power 的,cmd/bash 可能由于历史原因语法特别奇葩,大量特殊符号的运用,连搜索都不好搜,相对来说 powershell 的比较贴近日常使用的程序语言,上手难度--

    而且楼上说指令太长的,说实话,对于一万年都不用一次的东西,你要是写的时候写的全称,之后再读的时候就不用查文档了。Linux 风格的那种一堆开关堆起来不查文档想破头都想不出来
    yedanten
        111
    yedanten  
       2022-09-01 10:29:23 +08:00 via Android
    不否认,powershell 很强大,但是每次用都得查文档,根本记不住,作为交互式来说,体验极差。作为 shell 文件,我写 py 不香么
    wxf666
        112
    wxf666  
       2022-09-01 10:42:32 +08:00
    @documentzhangx66 在交互式下,你也认为『 New-Item ... 比 ln ... 好,因为前者能让你清楚地知道,你在干嘛』吗?
    droppedbytech
        113
    droppedbytech  
       2022-09-01 14:22:46 +08:00
    其实就是习惯和普及度的问题吧...unix 系和 Bash 实在太普及了,导致生态有明显差距,尤其是对于全栈或者偏后台的开发者来说,一些命令已经是肌肉记忆了。
    如果只说 Shell 语言设计的好不好,bash 显然是不好,模块化 /调试 /可读性可以说都很差,但继承者们的 zsh 还是得兼容,就像 bash 也兼容了很多更早的 sh 一样,就是因为 unix 出现的早,习惯这套东西的人实在太多了,而蕴含的思想也确实足够经典和优秀。一门语言,不管是 shell 语言还是正儿八经的编程语言,并不是设计的好就能普及的,和很多因素挂钩,不然 JavaScript 早就应该被淘汰了吧🐶。感觉除非 Windows (或者哪个使用 PS 作为默认 shell 的操作系统)哪天成为了服务器 /嵌入式 /个人电脑 /便携移动设备的统治级操作系统,就像现在 Linux 这样,PowerShell 才会真正意义上普及吧,使用场景会驱动人们去学习。
    documentzhangx66
        114
    documentzhangx66  
       2022-09-01 17:21:56 +08:00
    @wxf666

    对!

    而且类似的事情还有很多,经常被人以麻烦、成本高的借口忽视,从而导致很多问题。

    小到数据丢失与误删,大到千年虫问题与 tcp 数据缺失校验,都是这种情况。
    byzod
        115
    byzod  
       2022-09-01 17:46:05 +08:00
    `解释性完整命名风格` + `没有自动补全` = `灾难`
    wxf666
        116
    wxf666  
       2022-09-01 18:27:56 +08:00
    @documentzhangx66 你日常在 shell 里都打些啥命令啊,天天碰到这些问题么。。
    documentzhangx66
        117
    documentzhangx66  
       2022-09-01 18:35:17 +08:00
    @wxf666

    这是严谨,也是企业级的思路。

    举个最简答的例子吧,假设你要帮你朋友的电脑进行重装,你如何指导他进行备份数据?

    在企业级的思路了,很多日常的搞法,其实风险很大的。你可以借这个经典问题,思考一下。
    james122333
        118
    james122333  
       2022-09-01 19:17:20 +08:00
    @documentzhangx66

    不觉得 不论交互还是写脚本 这样一写多就很杂 而且除非你常用 否则你还是不一定能一眼看出做什么 还有一堆自定义的东西
    james122333
        119
    james122333  
       2022-09-01 19:20:43 +08:00
    @documentzhangx66

    严谨... 依照这标准好多项目都不严谨
    如果 java 这是严谨没错 但 shell 不是
    如果你朋友什么都不会 那个 powershell 他也不会懂的...
    james122333
        120
    james122333  
       2022-09-01 19:27:09 +08:00
    @droppedbytech

    基本上就是模块化 /调适 /可读性都要自己弄 习惯好其实写起来算美观又灵活
    wxf666
        121
    wxf666  
       2022-09-01 19:34:23 +08:00
    @documentzhangx66 我不知道你打算怎么备份,tar ? rsync ? dd ?或者啥更专业的命令

    要不你直接说会碰到啥问题吧
    smallthing
        122
    smallthing  
       2022-09-02 03:39:11 +08:00
    半懂不懂的为啥要发帖子给人增加压力?
    首先:不鼓励使用别名
    从 Powershell 6.x 开始,“Core” curl 不再是 的别名 Invoke-WebRequest (别名 wget 也被删除)。而是 Invoke-WebRequest 直接使用。

    如果你要跨平台使用,你需要安装的是显然是 pwsh (黑色的 powershellcore )而不是蓝色的那个
    底下一堆说参数不支持的难道不知道就算是老版本的 powershell 也可以用 curl.exe 来调用原始 curl ?
    smallthing
        123
    smallthing  
       2022-09-02 03:47:25 +08:00
    @yanue 对 相比之下 linux shell 简陋至极。
    其实主要是 c#生态在国内不好,如果像 go/python 一样有很多人写了免费运维工具。pwsh 的优势会暴涨。
    wxf666
        124
    wxf666  
       2022-09-02 08:56:13 +08:00
    @smallthing 在写复杂脚本时,我也认为 Linux Shell 很丑陋


    但在交互式下,你觉得 PowerShell 的优势是啥呢?

    - 是和 105 楼说的那样,参数写得明显直白,能减少出错,更加安全?

    - 还是 36 楼说的,Linux Shell 命令太短,很容易不理解 ln ls ll du dd df 什么意思?
    ryan4yin
        125
    ryan4yin  
       2022-09-02 11:03:01 +08:00
    非 Windows 系统没啥必要单独装 powershell 用,真要装还不如装这个:

    https://www.nushell.sh/
    documentzhangx66
        126
    documentzhangx66  
       2022-09-02 17:40:14 +08:00
    @wxf666 会遇到啥问题,我在前面已经说了,比如 -v ,这样写是很方便,但 -v 在不同环境下,意义不一样,有时候是 version ,有时候是 verbose 。

    企业级,或者说生产环境,或者说工作,一定要严谨、认真,因为不这样做,一定会有隐患。

    如果只是你私人的小项目,你喜欢怎么玩都行,因为就算被黑了,损失也不大。工作上的东西,你偷懒了,极端情况下,失职造成巨大损失,有可能就是牢狱之灾了,这还会影响下代人。

    在工作上偷懒,本质是对公司中的其他人、投资者的不负责、不公平。
    documentzhangx66
        127
    documentzhangx66  
       2022-09-02 17:41:00 +08:00
    @james122333

    别人不严谨、摆烂,会成为你不严谨与摆烂的理由吗?
    wxf666
        128
    wxf666  
       2022-09-02 17:55:04 +08:00
    @documentzhangx66 这样的需求,Python 等脚本语言,应该更适合?

    别说参数了,连语法都有专业 IDE 实时检查,还能逐步调试等
    documentzhangx66
        129
    documentzhangx66  
       2022-09-03 14:57:41 +08:00
    @wxf666

    是的。

    严格来说,不仅需要实时检查,单步调试,就连命令与数据,也应该分开,不然一定会导致 SQL 这种注入攻击。

    问题是到了这一步,大部分人觉得,代价太高了,不愿意去搞。
    wxf666
        130
    wxf666  
       2022-09-03 15:33:41 +08:00
    @documentzhangx66 你都说那个风险可能导致坐牢,开个 IDE 写个几行几十行 Python Ruby 啥的,代价也不算高吧
    documentzhangx66
        131
    documentzhangx66  
       2022-09-03 21:22:54 +08:00
    @wxf666

    酒驾会坐牢,大家都知道。

    你上头条或抖音,随便搜搜,酒驾的事情少嘛?

    同一个道理:总会有人偷懒,刚好撞上大坑。
    chackchackGO
        132
    chackchackGO  
       2022-09-04 10:43:45 +08:00
    不知道为什么 core7 在我的 win10 环境下首次命令运行速度极慢, 命令补全的速度也很慢, 实在忍不了.
    james122333
        133
    james122333  
       2022-09-09 00:00:30 +08:00 via Android
    @documentzhangx86

    这只是另一种强迫症 严谨还不光只是名词 是贯穿整个程序的 言简意赅串联而成的应用是不严谨吗?
    james122333
        134
    james122333  
       2022-09-09 00:10:34 +08:00 via Android
    @documentzhangx86

    很多时候这种严谨会特别抢戏也会破坏整体的严谨
    873792861
        135
    873792861  
       2022-09-18 13:39:44 +08:00
    @873792861
    @Howlaind 你不妨比较下在 5.1 版本下 powersehll 提交 form-data 这种包含字符串字段和图片的,用 powershell 引用 httpclient 和用 requests 来写,哪个更方便?
    Howlaind
        136
    Howlaind  
       2022-09-18 13:56:35 +08:00 via Android
    @873792861 Invoke-WebRequest 或者 Invoke-RestMethod 命令在 PowerShell 6.1.0 之后支持-Form 参数,
    Howlaind
        137
    Howlaind  
       2022-09-18 13:58:32 +08:00 via Android
    抱歉,上面一句手滑没打完。
    通过这个参数,可以很方便的提交包含图片的 form-data 。可以在官方文档中查看事例。
    当然 5.1 我也很久没用过了。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.