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

无意中学了点 powershell ,惊了, 这东西是不是低估了

  •  1
     
  •   iorilu · 2023-08-27 14:48:57 +08:00 · 19635 次点击
    这是一个创建于 454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前以为 shell 都是 bash 之类那种

    来来回回就是调点命令,用管道串联几个命令

    来来回回都是处理文本, 别提多麻烦, 还有一些诡异语法之类的 awk

    大家都默认这样就不错

    最近因为一些用途, 了解了点 powershell

    立马惊了,powershell 命令输出的都是真正的对象, 直接 相当于管道处理对象, 不需要折腾命令数着几列到几列处理文本, 既然是对象, 直接拿属性, 调用方法都行, 方便太多

    而且 powershell 现在跨平台, 开源了, 感觉微软一出手, 开源真没人玩的过啊

    我打算以后 mac , 或 linux 上也用 powershell 了

    有兴趣的可以了解下

    135 条回复    2023-08-31 00:48:53 +08:00
    1  2  
    tairan2006
        1
    tairan2006  
       2023-08-27 14:56:54 +08:00 via Android   ❤️ 30
    并不好用,说实话你还不如写 python
    FrankHB
        2
    FrankHB  
       2023-08-27 15:02:00 +08:00   ❤️ 10
    没有明显低估或者高估,市场反应大抵是合理的。
    学习性价比偏低。对已经会用传统 shell 的正经用户可能还会多赠烦恼。
    https://www.v2ex.com/t/838173#r_11433315
    zictos
        3
    zictos  
       2023-08-27 15:04:14 +08:00
    越是这样反倒更复杂了,专门去学感觉不划算,简单的命令问 chatgpt 就行,可用性非常高。
    其他的用 python 就行,linux 也没必要用 powershell ,linux 基本也自带 python 了。
    dcsuibian
        4
    dcsuibian  
       2023-08-27 15:05:53 +08:00   ❤️ 4
    讲真,在 windows 就用 powershell ,在 linux 就用 bash ,在 mac 就用 zsh
    iorilu
        5
    iorilu  
    OP
       2023-08-27 15:11:04 +08:00
    @dcsuibian 任何程序都有跨平台的需求

    能一个程序在所有平台用, 为什么不用呢
    zictos
        6
    zictos  
       2023-08-27 15:12:58 +08:00
    python 直接在命令行使用也很方便的,感觉大部分时候都可以替代命令。

    python -c "a = 1; print(a)"
    python -c "code = 'for i in range(100):\n if i < 10:\n print(i)'; exec(code)"
    Lightbright
        7
    Lightbright  
       2023-08-27 15:15:07 +08:00 via Android
    你说的没错,功能过于强大导致有很多恶意利用方式,有的管理员会直接禁用这个
    zictos
        8
    zictos  
       2023-08-27 15:15:27 +08:00
    @zictos #6 下面这行代码发出去后字符串里面的缩进好像没了,所以会报错。\n 后有空格缩进。
    python -c "code = 'for i in range(100):\n if i < 10:\n print(i)'; exec(code)"
    ntop
        9
    ntop  
       2023-08-27 15:16:22 +08:00   ❤️ 2
    市场早给它定价了
    junkun
        10
    junkun  
       2023-08-27 15:17:55 +08:00   ❤️ 2
    @iorilu 从古自今哪个跨平台的产品能真正跨平台了,bash 这种简单的东西都搞不好跨平台,难道更复杂的东西可以吗。连 java 没有自家系统的,都搞成一次编写处处调试了,何况微软。
    idealhs
        11
    idealhs  
       2023-08-27 15:22:10 +08:00
    powershell 确实很强,目前大部分 windows 平台下的脚本已经弃用 cmd 转向 ps1 ,而且我认为在 gpt 时代,powershell 没有学习成本,只要问就可以
    FrankHB
        12
    FrankHB  
       2023-08-27 15:51:35 +08:00   ❤️ 1
    @dcsuibian @idealhs 想简单了,powershell 和 pwsh 微妙不兼容,测试版本都烦。而且在 Windows 上 COMSPEC 默认仍然是 cmd ,用 native 语言互操作几乎不可能可靠测试(就算无视 cmd 这玩意儿 UCRT fallback 都是写死的问题)。虽然其它 shell 也有版本和兼容性问题,但测试起来明显简单。
    这还不说得多学不同的东西。虽然学语言不难,但受限还是个性价比问题:没能明显更好地满足需求为什么非得学不同的?凭空多出兼容性包袱。
    更糟糕的问题我上面早就提过:跨平台项目同时用多种 shell ,凭空多出来 powershell 特供的 bug ,还得用户倒霉。
    @iorilu 相信我,至少目前 bash 跨平台总体成本比 powershell 低得多,无非 Windows/macOS 用户得多安装个运行时而已,这是只有一次性的部署代价。而且你 powershell 想要用不过时的特性就是 Windows 都一样得另外装 pwsh ,明显比 bash 吃亏。虽然传统 shell 写起来确实更恶心但就算 pwsh 也不是都省事,要干活比 powershell 熟练工好找多了,怕翻车至少也有 ShellCheck 。
    nuk
        13
    nuk  
       2023-08-27 15:53:21 +08:00
    那个传输对象的管道真的很慢
    Iamsonny
        14
    Iamsonny  
       2023-08-27 15:55:44 +08:00   ❤️ 1
    windows 打交道的不多了,但是接触 vmware 相关工作过程中。
    vmware 虚拟化运维 powershell 应用场景比较多。
    mooyo
        15
    mooyo  
       2023-08-27 15:56:03 +08:00   ❤️ 6
    powershell 今天的样子如果能早出现二十年,可能就没 bash 啥事了,但目前市场上已经没有他的生态位了。
    比 bash 简单么?不见得。比 python 更强大么,也不见得。那对用户来说为什么要在 bash/python 中间选一个不上不下的替代品呢?
    Iamsonny
        16
    Iamsonny  
       2023-08-27 15:57:05 +08:00
    因为厂商有 powershell 为基础的大量 sdk
    iorilu
        17
    iorilu  
    OP
       2023-08-27 15:58:30 +08:00
    @zictos 第二行运行不了把, 没有缩进啊

    python 这种靠格式化定义语言结构的, 不太方便在命令行直接执行多行代码
    tux
        18
    tux  
       2023-08-27 16:01:41 +08:00   ❤️ 2
    安全软件疯狂阻止 ps 脚本
    impl
        19
    impl  
       2023-08-27 16:03:15 +08:00   ❤️ 1
    是挺好玩的,挺 cool 的;可以顺带学点 c#,写写 module 玩玩
    zictos
        20
    zictos  
       2023-08-27 16:04:49 +08:00   ❤️ 1
    @iorilu #17 因为 v 站自动把空格去掉了,我原命令是有空格的。如果只用一个空格缩进的话,那只需要把 print(i)前面多加一个空格就能执行了。
    另外也可以把‘字符串代码’转成 base64 ,然后解码,之后再用 exec 执行。
    6bsLo69Qdu3RPY4c
        21
    6bsLo69Qdu3RPY4c  
       2023-08-27 16:05:01 +08:00
    python 新手学需要多久
    @tairan2006
    iorilu
        22
    iorilu  
    OP
       2023-08-27 16:05:33 +08:00
    @tux pwsh 太强大, 能做任何事

    默认是不允许执行下载脚本的
    cnbatch
        23
    cnbatch  
       2023-08-27 16:44:00 +08:00
    当然是是被低估了

    实测在严重受限的内网环境中,powershell 十分方便。
    这些环境有联网限制,也有安装程序的限制(禁止自行安装第三方软件),这种情况下 powershell 就顺理成章地变成是最佳选择了。

    因为这是唯一一个可以调用 .net 类库的内置 shell ,平时 .net 类库能做什么,powershell 就能做什么。

    我个人的做法是,先尝试 cmd ,如果 cmd 无法满足需求,就转用 powershell


    至于 Linux 嘛……
    我所在的公司比较死板,只允许使用 Linux 的内置 shell ,无法使用 powershell ,所以就只能在 Windows 使用了

    至于私人使用,我个人私下并不怎么用 Linux ,用得更多的是 FreeBSD 及其衍生版。
    我用 BSD 时十分老派,要么 sh 要么(t)csh ,就连 GhostBSD 预装的默认 shell 是 fish 我都要改回 tcsh 。任何外来的 shell ,包括 bash 和 powershell ,一律不在 BSD 使用
    ShadowPower
        24
    ShadowPower  
       2023-08-27 17:00:40 +08:00   ❤️ 1
    好几年前只有.net framework 的时代,我还用 PowerShell+WinForm 做过 GUI 程序……

    有些时候 PowerShell 比 bash/python 还要方便,例如 ForEach -Parallel 这玩意

    https://learn.microsoft.com/en-us/powershell/scripting/learn/deep-dives/write-progress-across-multiple-threads?view=powershell-7.3

    例如碰到那种转换格式或者处理文件的命令行工具,本身不支持多线程,可以用 PowerShell 同时启动多个进程处理不同文件,充分利用多核 CPU

    用别的脚本不是不能写,但不像这样简单
    adoal
        25
    adoal  
       2023-08-27 17:05:08 +08:00   ❤️ 9
    Powershell 大致可以理解为“Shell 夏普”language ,就是 C 夏普、F 夏普里那个夏普

    所以呢,对于玩夏普的那帮人,有时候需要一个不那么软工味的脚本语言来干点运维自动化之类的活是很顺手的,比如知乎三大软狗温赵轮之一的轮子哥 vczh 。

    而对老派 Unix 用户来说就没那么大吸引力了,跟这些人讲 Powershell 是跨平台的可以在 Unix 上跑、能在管道里传对象,人家只会觉得这是夏普帮的自我感动。
    ShadowPower
        26
    ShadowPower  
       2023-08-27 17:06:32 +08:00
    上面的链接给出的例子还是比较复杂,那是并行更新进度的例子
    Jirajine
        27
    Jirajine  
       2023-08-27 17:20:48 +08:00 via Android
    bash 确实古老,但 pwsh 就是垃圾,从各个方面来说。
    想要 modern shell ,还有 elvish/nushell/oil/fish 等一大票候选。
    auh
        28
    auh  
       2023-08-27 17:32:30 +08:00
    这就是垃圾。真是服气了。
    liaojl
        29
    liaojl  
       2023-08-27 17:52:05 +08:00 via iPhone
    powershell 写脚本可能挺厉害的,但不太适合终端交互,命令太长了。
    miyuki
        30
    miyuki  
       2023-08-27 17:54:43 +08:00   ❤️ 1
    算 sha512 不想装别的软件,灵机一动 Google 一下,最后用到 powershell 了

    Get-FileHash .\myfile -Algorithm SHA512
    ysc3839
        31
    ysc3839  
       2023-08-27 18:03:35 +08:00 via Android   ❤️ 1
    个人认为没有被低估,而是设计方向错了,PowerShell 更类似 Python 等脚本语言,用作 shell 用途的话需要输入的命令太繁琐,很多时候还得查某个命令有啥参数和输出。整体语法既像传统 shell 又像脚本语言,不便于熟悉其他语言的用户快速上手。
    iorilu
        32
    iorilu  
    OP
       2023-08-27 18:04:55 +08:00
    pwsh 功能非常强大, 不说别的,处理点
    什么 csv ,log 文件, 正则表达式啥的, 都很方便了
    makelove
        33
    makelove  
       2023-08-27 18:05:20 +08:00   ❤️ 4
    微软的拿手好戏就是把简单的事复杂臃肿化
    acctv2
        34
    acctv2  
       2023-08-27 18:07:27 +08:00
    我一直在用 PS ,只要是主力 Win 的,我觉得都可以学一点 PS ,命令忘了直接去 MSDN 查就行。

    最方便的是 PS 脚本+计划任务,可以在 Windows 上很快写一些定时功能,我就用 PS 写定时备份。
    life90
        35
    life90  
       2023-08-27 18:08:38 +08:00 via Android
    这个玩意,微软自己把它禁用了。现在默认安装系统策略,如果这个 PS 脚本文件没有被签名是不给执行的。
    acctv2
        36
    acctv2  
       2023-08-27 18:08:57 +08:00
    Python 最大的问题还是没法简单当成系统脚本用。PS 本质上还是增强型的 BASH ,上面拿 Python 来类比的属于完全方向不对。

    比如我 Get-WMI 就能去拿设备管理器名单,Python 就得绕圈子
    iorilu
        37
    iorilu  
    OP
       2023-08-27 18:12:00 +08:00
    @acctv2 pwsh 是完全支持.net 库的, 返回对象都一样的
    如果有用的上地方, 肯定远比 python 强啊
    拿 python 来比, 还是以为只是处理字符串把
    kkocdko
        38
    kkocdko  
       2023-08-27 19:15:45 +08:00
    @FrankHB Bash 在 Windows 上用,除了较重的 Msys2 之外,甚至可以考虑 busybox-w32 https://frippery.org/busybox/ ,非常轻量,如果不是特别依赖 Bash 的某些语法扩展的话,Shell 真的可以在大多数时候做到 Windows / Linux / macOS 跨平台
    vituralfuture
        39
    vituralfuture  
       2023-08-27 19:27:59 +08:00 via Android
    很巧今天就写了一个很简单的脚本,用来一次启动两个程序,遇到了两个问题
    1. ps1 文件打开方式设为文本编辑器,双击直接打开了文本编辑器,打开方式设为 powershell ,右键没法编辑文本,只有先打开文本编辑器再从文本编辑器里面打开这个文件

    2. 双击运行,窗口一闪而过,以为命令写错了,加个 pause 还是一闪而过,打开 powershell 通过.\file.ps1 调用,发现 executePolicy 默认为 restrict ,禁用了 powershell 脚本的 执行。只有用管理员权限再开一个 powershell 修改执行策略为 remoteSigned

    3. 写了另一个 cmd 脚本调用 powershell 脚本(只是为了能够双击运行),窗口一闪而过,加上 puase 后发现中文文件名乱码了😓😓😓,系统默认文件编码应该是 GBK ( win10 家庭版,只能选择语言为中文,之前担心盗版的 win10 专业版容易掉所以用的自带的 win10 家庭版数字前面)

    写这么一个简单的脚本都折腾了十几分钟,有点麻烦,还是感觉 linux 好用些

    powershell 相比 cmd 确实是很大的进步,但我还是 prefer linux 的 shell
    dianso
        40
    dianso  
       2023-08-27 19:35:57 +08:00
    我在 debian 上脚本都是 go+bash
    win 上早就是 ps 了
    各种 go py 能做的它都能做
    joyhub2140
        41
    joyhub2140  
       2023-08-27 20:00:25 +08:00   ❤️ 1
    bash 我写过,power shell 脚本我也玩过。。

    最后,我选择用 Java 写脚本,结合 yml 文件,用得挺爽的,有种用牛刀宰猪的感觉(逃。。。

    好处的话,就是 Windows/Linux/MacOS 都能跑。。。

    坏处的话,有时候一个简单的小功能都要几 MB 大,不过,现在我的 SSD 都 4TB 了,不在乎了。。。
    fbichijing
        42
    fbichijing  
       2023-08-27 20:06:30 +08:00   ❤️ 2
    就好比在当前的时间节点下处理 Excel ,不去使用 pandas 之类的,还去学 VB
    同意一楼和二楼的说法。“性价比低”。Linux 下的很多命令要比 Windows 下简洁,还有 alias 之类的可以自定义各种符合自己喜欢的命令出来,Windows 要实现相似功能,贼麻烦。写 python 或者每个人自己熟悉的脚本语言不香吗,在不同平台上大多数写法都差不多。又为何一定要把自己限制死在 Windows 下?
    xgdgsc
        43
    xgdgsc  
       2023-08-27 20:12:12 +08:00 via Android
    不如 py/julia
    BugCry
        44
    BugCry  
       2023-08-27 20:25:57 +08:00 via Android
    OP 哪天回到 bash 了,记得跟大伙儿说一下
    eagleoflqj
        45
    eagleoflqj  
       2023-08-27 20:41:22 +08:00 via iPhone
    没有人提 node ?我的 wasm 项目跨平台构建是用 tsnode 写的脚本(因为本来也要 node ),不过里面免不了 if(platform==='win32')
    favourstreet
        46
    favourstreet  
       2023-08-27 20:59:20 +08:00 via Android
    楼主可能还处在刚啃了甜的部分没啃到酸的部分,等用 pwsh 处理二进制流就会感觉到痛了。不过 pwsh 能通过.net 直接调用 windows 的所有系统调用确实比其他 shell 方便太多了
    iorilu
        47
    iorilu  
    OP
       2023-08-27 21:10:20 +08:00
    说实话, 我看到 pwsh 这种设计, 并不是说我马上有多大需求能用得上 pwsh 的对象特性

    而是第一次感觉,bash 这种是不是落伍了

    bash 当然已经几十年时间, 但面向字符串编程肯定是不方便的, 这点应该没有疑问

    如果 bash 或其他什么*sh 需要进化到面向对象, 显然 linux 上没人会干这种事

    所以我认为 pwsh 代表的是一种现代化的系统脚本语言

    从这点上, 我是愿意学习使用的
    zhuangzhuang1988
        48
    zhuangzhuang1988  
       2023-08-27 21:24:56 +08:00
    @joyhub2140 差不多,我用 c#写 makefile
    busterian
        49
    busterian  
       2023-08-27 21:44:58 +08:00 via Android
    我挺喜欢 powershell 的风格,而且如果方法正确,入门很快,遇到不清楚的指令可以凭借关键词 gcm -name *foo* 搜到,在 get-help foo-bar -examples 基本就清楚怎么用了。如果是 bash 或 cmd 要去啃 man 或 info 一大堆 flag 一点都不 intutive 不像 powershell 默认就有 tab 补全 flag 如果 args 有默认或可选也支持补全。
    iorilu
        50
    iorilu  
    OP
       2023-08-27 21:47:42 +08:00
    @busterian 是的,pwsh 的帮助系统也是非常先进的

    肯定比 man 好用多了

    另外规范的命名也是很好的

    动词-名词

    get-help

    这种命名方法, 配合帮助系统, 很容易找到需要的命令

    知道命令后看看例子, 大概就能用上了
    LokiSharp
        51
    LokiSharp  
       2023-08-27 22:06:30 +08:00
    感觉还是一如微软既往取错名字的项目,叫 PowerScript 或者 SharpScript 更好。本质上是 .net 的脚本语言实现。我感觉它比起 cmd 和 sh 健壮性更高,适合写脚本,但是由于健壮性太高反而不适合当 shell 。然后既然写脚本我为啥不用更专业的 Python
    kawaiidora
        52
    kawaiidora  
       2023-08-27 22:12:49 +08:00 via Android
    你知道吗,2015 年前,互联网程序员的政治正确是鄙视微软,以不用微软产品为荣
    james122333
        53
    james122333  
       2023-08-27 22:14:49 +08:00 via Android
    因为对 bash 等的理解还很菜才会这样觉得 当然研究需要时间不强迫 基本上也很少人在研究 我研究出来我也很少分享 基本上能说比 powershell 精美多了 powershell 就是一团
    lishoujun
        54
    lishoujun  
       2023-08-27 22:17:17 +08:00
    我的环境是 macos 和 linux desktop 平时默认用 fish 。 powershell 和 bash 不是同时期的软件吧。
    ambition117
        55
    ambition117  
       2023-08-27 22:25:37 +08:00 via iPhone
    后来发现不如直接写 python…
    iorilu
        56
    iorilu  
    OP
       2023-08-27 22:26:07 +08:00
    @kawaiidora 原来是这样啊

    但是这几年, 微软方向变了, 大力投入开源

    而且微软的实力在这里, 一出手搞得 vscode 基本现在成了大多数程序员首选了

    包括 python ,linux 等东西微软也投入不少

    所以, 我也看好后面 pwsh 微软也会大力投入的
    hhylx1950
        57
    hhylx1950  
       2023-08-27 22:28:01 +08:00
    @iorilu 是不是太看不起胶水语言 python 了,pythonnet 了解一下,能直接从 CLR 的 namespace import 。python 还能和 objc 集成,和 linux 的集成就更不用说。我何必学一门新语言,只为了 win 上写脚本更舒服呢
    jin7
        58
    jin7  
       2023-08-27 22:37:05 +08:00
    自己用 别分享出来
    swulling
        59
    swulling  
       2023-08-27 22:38:18 +08:00 via iPhone
    不如 Python as shell

    https://xon.sh/
    james122333
        60
    james122333  
       2023-08-27 23:02:43 +08:00 via Android
    @jin7

    powershell 也没什么好藏的 github 上使用量也不小 但我就是不会想用它
    whileFalse
        61
    whileFalse  
       2023-08-27 23:32:15 +08:00 via Android
    wget 都做不好的垃圾
    vastwelkin
        62
    vastwelkin  
       2023-08-27 23:43:05 +08:00
    @iorilu 但,go 开始的一些新语言,都不面向对象了
    aelloncs
        63
    aelloncs  
       2023-08-27 23:50:51 +08:00
    猜猜为啥 shell 前面为啥是 power
    sam0ple
        64
    sam0ple  
       2023-08-28 00:40:23 +08:00
    没被低估,主要是不符合人类的流式思维,bash 的管道操作所见就是所得,powershell 面向对象对机器友好,对人没 bash 友好,而运维的是人
    MeteorCat
        65
    MeteorCat  
       2023-08-28 01:09:21 +08:00 via Android
    甚至不如 Python 是正确的
    mikewang
        66
    mikewang  
       2023-08-28 01:19:42 +08:00   ❤️ 1
    #30 @miyuki
    这也是 PowerShell 的一个问题,大写小写加横杠,命令还老长。对于一个 Shell 来说,输入过于麻烦不是件好事。

    Get-FileHash .\myfile -Algorithm SHA512
    sha512sum ./myfile

    两者相比我还是喜欢下者。
    bao3
        67
    bao3  
       2023-08-28 03:08:20 +08:00
    要跨平台啊,那你用 sh 就可以了,不要用 bash/power shell ,就用 posix 标准的 sh 。无论从哪个角度,ps 都不是上选。
    iceheart
        68
    iceheart  
       2023-08-28 05:57:52 +08:00 via Android
    用 perl 都几乎没了,谁还有心思学其他的。
    bash 的优点是
    1. 可用性: linux 集成,不管哪个发行版都无需额外安装。
    2. 可维护性: 足够简单,几乎没有学习成本,谁都能维护。
    3. 一致性: 在各个发行版的 shell,包括 busybox ,执行起来都是一样的。

    综上特点,bash 是最终选择,是人们用脚投票的结果
    charlie21
        69
    charlie21  
       2023-08-28 06:46:44 +08:00 via Android
    如果 powershell 出现在 1990 年,bash 出现在 2020 年,哪个还会主动用 bash ?
    james122333
        70
    james122333  
       2023-08-28 07:38:32 +08:00 via Android
    @charlie21

    不会有这种事情发生的 当时硬件不够好 这东西也违背了哲学 更何况 dotnet 在 2002 才释出 这东西就是不够轻量在现在也有一堆竞品 bash 也都不是这么弱
    james122333
        71
    james122333  
       2023-08-28 07:48:22 +08:00 via Android
    @iceheart

    1. 现有的确是 bash 内建
    2. 一般用法的确没难度 但深入的不是 通常见到的是一般用法就是
    3.busybox 上的是 ash 不是 bash 只是在 2 的状况下来说是相容的
    james122333
        72
    james122333  
       2023-08-28 07:53:33 +08:00 via Android
    @iceheart

    要相容其实也很简单 或者判断 BASH_VERSION/ZSH_VERSION...等变量做不同事即可
    毕竞除了 syntax 语法错误它是不会预先做其它检查的
    tyzandhr
        73
    tyzandhr  
       2023-08-28 07:56:00 +08:00 via Android
    我可能知道你是群里的谁了
    fox0001
        74
    fox0001  
       2023-08-28 08:22:57 +08:00 via Android
    @joyhub2140 #41 这种需求,我用 go
    laozhoubuluo
        75
    laozhoubuluo  
       2023-08-28 08:29:29 +08:00 via Android
    Linux native 的生态早就是 bash 的,跨平台生态也被 Python 等这种易用性和跨平台都相对好的语言抢了。况且 Linux 装 PowerShell 这个事情本身很多人就觉得很怪。
    另外 bash 还支持一些 BSD 之类的其他系统,PowerShell 就不一定了。
    NessajCN
        76
    NessajCN  
       2023-08-28 09:04:52 +08:00   ❤️ 2
    PowerShell-Shell-Is-So-Freaking-Powerfull --that IWould.Never.Use.it C:\Users\Manifesto.xml
    ladypxy
        77
    ladypxy  
       2023-08-28 09:08:15 +08:00
    powershell 本来就很强大,尤其是现在可以跨平台之后
    yjd
        78
    yjd  
       2023-08-28 09:10:50 +08:00
    @mikewang 是的。命令又臭又长,还不如直接用编程写。简单的批处理就能搞定。
    cheng6563
        79
    cheng6563  
       2023-08-28 09:16:18 +08:00
    但是我启中断就是为了调命令啊,用 powershell 甚至原来调命令的参数都不兼容。
    Cloutain
        80
    Cloutain  
       2023-08-28 09:21:08 +08:00
    如果不强的话就不叫 powershell 了,只是在 python 当道的时代,人们的选择更倾向易学易用
    cat9life
        81
    cat9life  
       2023-08-28 09:31:57 +08:00
    感觉微软并不够重视 Powershell ,看一下这里 https://segmentfault.com/a/1190000042048851
    Narcissu5
        82
    Narcissu5  
       2023-08-28 09:35:21 +08:00
    ps 基于.net 既是它强大的地方,也是它局限的地方,毕竟不是每个人都会写/喜欢写 C#,非.net 语言扩展起来反而更麻烦。
    bash 强大虽然简陋但是扩展方便,处理标准输入输出是个语言都支持,难道你还指望 bash 里面写复杂逻辑?
    jrqlxue
        83
    jrqlxue  
       2023-08-28 09:40:16 +08:00
    个人未找到 powershell 简单实现`cut -f 3-5 file.txt`的方法

    更不确定常用文本处理: `zgrep |cut|sort|uniq -c|sort -nr|head ` 是否有简单 powershell 的实现了
    kawaiidora
        84
    kawaiidora  
       2023-08-28 09:49:58 +08:00
    @iorilu 命令长其实也不是什么问题,shell 补全都有。

    未能普及的原因和 dotnet 一样,等到全平台发力的时候已经错过占领市场的时间点了,没办法和根深蒂固的 macos+linux 的 shell 抗衡
    XIVN1987
        85
    XIVN1987  
       2023-08-28 09:51:51 +08:00
    面对科学计算,有些人喜欢用 C++ + Python ,底层用 C++ 提高性能,上层用 Python 提高易用性;有些人喜欢一把梭,全都用 Julia 写。。

    面对系统管理,有些人喜欢用 Bash + Python ,简单的需求用 Bash ,,复杂的需求用 Python ;有些人喜欢一把梭,全都用 PowerShell 写。。
    snylonue
        86
    snylonue  
       2023-08-28 10:07:43 +08:00
    一直没懂 powershell 的自动补全怎么用
    lovedebug
        87
    lovedebug  
       2023-08-28 10:12:47 +08:00
    powershell 真的挺强大的
    dw2693734d
        88
    dw2693734d  
       2023-08-28 10:17:38 +08:00
    fishshell 才是王道
    Masoud2023
        89
    Masoud2023  
       2023-08-28 10:22:11 +08:00
    linux 也可以直接#!/bin/python ,根本没有必要 pwsh
    techstay
        90
    techstay  
       2023-08-28 10:27:58 +08:00
    有时候第一感觉是对的,shell 本来就是几个命令串个管道的事情。powershell 最重要的问题就是生态不行,没有 ohmyzsh 这样的好东西,而且速度也不行。遇到复杂的需求,不如直接用 python 脚本写。
    jaggerjiang
        91
    jaggerjiang  
       2023-08-28 10:29:10 +08:00   ❤️ 1
    @kawaiidora #52 因为 2015 年前,微软是真的不 open 的,大家当然不喜欢
    Songxwn
        92
    Songxwn  
       2023-08-28 10:47:07 +08:00
    太复杂了,高不成低不就。用于运维太负责,开发有其他语言
    hotdogwc
        93
    hotdogwc  
       2023-08-28 11:22:10 +08:00
    普及不了是有原因的,深度使用的话,折腾的东西远远多于所谓的“强大”带来的便利,我反正是做梦都想用回 bash ( M$ 员工的痛苦
    LitterGopher
        94
    LitterGopher  
       2023-08-28 11:25:15 +08:00
    我现在是 Linux 主力机( bash ) + mac 备用( zsh ),也不太会考虑使用 Powershell 。

    第一,我对原生多多少少是有一点点但不多的追求。Powershell 在 Linux 上的适配度怎么可能与 bash/fish/zsh 相比(虽然 sh 才是标准解释器,但使用的人应该反而不多吧🙄?————————也许)

    第二,我不知道 Powershell 在 Linux 或 macOS 适配性如何,但使用 Windows 的时候里面各种驼峰命名的命令令我实在大为不解,以及不少命令长度都两个单词起步。这可是命令行ㄟ,这可是要追求效率的地方ㄟ?这种时候就应该是去 TM 的用户体验,效率第一。所以抱歉,那些有长又不好输入还不好记的命令显然不符合我的追求。举个简单的例子,这是微软官方提供的命令别名示例:New-Alias -Name gh -Value Get-Help ,如果在 linux 上呢 alias gh=Get-Help 。

    第三,我在 Windows 上对 Powershell 的体验就不是很好,更遑论在其他平台体验这玩艺儿了(如果我在中国都没能学好汉语,是不会期待去日本学能学好的)。

    第四,bash/zsh/fish 本身啥也不是,一点都不厉害,真正厉害的是 /usr/bin 下面那些可执行文件,bash 只是提供了一个前端而已。就像上面你说的 awk ,awk 确实可以在 bash 中使用,但并不是 bash 提供了 awk 。再换句话说就是就算使用 Powershell 我依旧是使用 awk ,grep ,sed ,powershell 带给我的改变只是 .sh 脚本变成了 .ps 脚本。而 Powershell 脚本的语法让我多少有点笑而不语的。

    第五,bash/fish/zsh 真的就那么好么?到也不见得,至少 Windows 上的 bash ( git bash )难用得一批。

    第六,我喜欢 do one thing, and do it will 。而不是 all in one 。
    luzemin
        95
    luzemin  
       2023-08-28 11:25:53 +08:00
    之前的一个项目是国外某公司使用 Windows server 自建私有云,自动化升级产品,选择的是 PowerShell DSC
    PowerShell 可以理解就是.NET Framework 的 UI ,所以,在 Windows 下绝对是王者
    stcQ2G13k9yxep40
        96
    stcQ2G13k9yxep40  
       2023-08-28 11:35:12 +08:00
    powershell 的确很强大,三年前在 IDC 机房做运维的时候,用 powershell 写过很多运维脚本,包括 winform 都可以写,还可以调用.net 框架,异常强大。windows 平台下写脚本,首选 powershell 。
    stcQ2G13k9yxep40
        97
    stcQ2G13k9yxep40  
       2023-08-28 11:41:55 +08:00
    @mooyo 至少在 windows 平台下,比 bash ,python 高效的多。比如一个特定需求:获取一个路径下创建日期在三天前,文件名包含 test ,后缀为.doc 的文件。Get-ChildItem -Path "C:\your\target\path" -Filter "*test*.doc" | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-3) },一条命令搞定。
    flynaj
        98
    flynaj  
       2023-08-28 11:44:56 +08:00
    @iorilu #5 目前跨平台有实用价值最方便的还是 golang 。
    sky96111
        99
    sky96111  
       2023-08-28 11:47:01 +08:00 via Android
    我觉得 PS 最大的问题是交互性不佳。
    PS 函数能补全参数,用点操作符访问属性,管道传递对象。而外部程序只能补全路径,不能访问属性,管道传递文本。导致 PS 用起来有一种很强的割裂感。而 shell 中使用的大部分工具都是外部程序,不是 PS 函数,导致 pwsh 用起来的体验完全没有 bash 、fish 、zsh 这样顺手
    Unix 就很统一,大家都是文本可以通用一套工具处理、可以直接为外部程序添加补全规则而不是包装成 shell 函数…
    madao1993
        100
    madao1993  
       2023-08-28 11:49:16 +08:00
    想要分离单个功能的时候会用用,比如用 powershell 监控剪切板,传递给其它程序,再处理得到的字符串。也就十几行代码。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2714 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 06:42 · PVG 14:42 · LAX 22:42 · JFK 01:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.