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

2023-08-27 14:48:57 +08:00
 iorilu

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

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

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

大家都默认这样就不错

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

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

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

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

有兴趣的可以了解下

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

能一个程序在所有平台用, 为什么不用呢
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
2023-08-27 15:15:07 +08:00
你说的没错,功能过于强大导致有很多恶意利用方式,有的管理员会直接禁用这个
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
2023-08-27 15:16:22 +08:00
市场早给它定价了
junkun
2023-08-27 15:17:55 +08:00
@iorilu 从古自今哪个跨平台的产品能真正跨平台了,bash 这种简单的东西都搞不好跨平台,难道更复杂的东西可以吗。连 java 没有自家系统的,都搞成一次编写处处调试了,何况微软。
idealhs
2023-08-27 15:22:10 +08:00
powershell 确实很强,目前大部分 windows 平台下的脚本已经弃用 cmd 转向 ps1 ,而且我认为在 gpt 时代,powershell 没有学习成本,只要问就可以
FrankHB
2023-08-27 15:51:35 +08:00
@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
2023-08-27 15:53:21 +08:00
那个传输对象的管道真的很慢
Iamsonny
2023-08-27 15:55:44 +08:00
windows 打交道的不多了,但是接触 vmware 相关工作过程中。
vmware 虚拟化运维 powershell 应用场景比较多。
mooyo
2023-08-27 15:56:03 +08:00
powershell 今天的样子如果能早出现二十年,可能就没 bash 啥事了,但目前市场上已经没有他的生态位了。
比 bash 简单么?不见得。比 python 更强大么,也不见得。那对用户来说为什么要在 bash/python 中间选一个不上不下的替代品呢?
Iamsonny
2023-08-27 15:57:05 +08:00
因为厂商有 powershell 为基础的大量 sdk
iorilu
2023-08-27 15:58:30 +08:00
@zictos 第二行运行不了把, 没有缩进啊

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

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

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

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

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

© 2021 V2EX