以前以为 shell 都是 bash 之类那种
来来回回就是调点命令,用管道串联几个命令
来来回回都是处理文本, 别提多麻烦, 还有一些诡异语法之类的 awk
大家都默认这样就不错
最近因为一些用途, 了解了点 powershell
立马惊了,powershell 命令输出的都是真正的对象, 直接 相当于管道处理对象, 不需要折腾命令数着几列到几列处理文本, 既然是对象, 直接拿属性, 调用方法都行, 方便太多
而且 powershell 现在跨平台, 开源了, 感觉微软一出手, 开源真没人玩的过啊
我打算以后 mac , 或 linux 上也用 powershell 了
有兴趣的可以了解下
101
liuidetmks 2023-08-28 12:03:26 +08:00
没深入了解 ps ,
如果是第三方程序,如何传输对象呢?是不是还得看文档 如果是文本的话,自己看就可以大概处理了 |
102
e3c78a97e0f8 2023-08-28 15:51:45 +08:00 via iPhone
@qishouvip2022 你学透了就觉得高效,对于没接触过的人这学习成本太高了。
|
104
iorilu OP @liuidetmks 我也没深入了解
但有很多三方模块可以安装 https://www.powershellgallery.com/ 都可以传对象的, 应该是按规范编码, 就可以传自定义对象 powershell 模块一般都有不错的帮助文件 |
105
vhwwls 2023-08-28 16:52:08 +08:00
@iorilu 你低估了 Linux 生态对 bash 的依赖性,有大量的各种各样的脚本只能跑在 bash 上,你可以在 Linux 上把 powershell 当成默认 shell 用一段时间,就知道为什么这玩意注定没办法替代 bash 了。
|
106
NessajCN 2023-08-28 16:52:42 +08:00
@qishouvip2022 find /your/path -type f -name '*test*.doc' -mtime 3
|
107
leeg810312 2023-08-28 17:51:50 +08:00
从功能来说,我觉得 powershell 是很强大的,只是从生态和习惯角度,不易被非 windows 平台用户接受,而且由于生态,跨平台兼容性也是在运行时,有些部署运维脚本不方便用,只有 sh 脚本。另外还有就是微软产品鄙视党了,这已经超出技术范围了。
|
108
antonius 2023-08-28 18:00:34 +08:00
强大确实是强大,复杂也是真的复杂。个人感觉 bash 和 zsh 恰好处于 cmd 和 powershell 的中间的状态,重要的是命令短,交互输入也比 powershell 简洁方便。
|
109
sariya 2023-08-28 18:07:00 +08:00 via Android
可能是没系统学过,总觉得 ps 的命令参数形式摸不着头脑
|
110
LindsayZhou 2023-08-28 22:08:16 +08:00
@zictos #6 单行里面写循环我一般习惯用 map
python -c "list(map(lambda i: print(i) if i<10 else None, range(100)))" 这样 |
111
zictos 2023-08-29 04:40:40 +08:00 via Android
@LindsayZhou 我那是举例,主要是说明无论多复杂的代码或多重嵌套都可以写成单行命令,单行字符串加 exec 函数
|
112
msg7086 2023-08-29 07:08:09 +08:00
「强大」不总是好事。这就像问,汇编速度又快功能又强,什么都能做,又什么都做得很快,为什么不是人人都用呢。那总是有短板的,学习曲线高。为什么用 bash 之类的 shell ,就是因为输入输出功能「不强大」,是纯字符串,所以只要记住字符串处理,而非记住所有的对象结构,学习难度差很多。
就像 unix 下的设计原则,万物都是文件一样。你看到 windows 的设计,哇什么都是对象。但是每个对象都有自己的结构,而文件呢,任何 linux 工具都能够轻松处理。 什么东西都是字符串有一个好处,就是进程间通讯会简单很多。如果你在 powershell 里调用第三方程序,返回的还是字符串,又不会是对象。 如果要处理更复杂的逻辑,那直接用 python 就好了,Linux 一般都内置了,Windows 下安装也简单。 |
113
iorilu OP @sariya 没把 ,我觉得比 bash 标准的那套规范多了
ps 没有- , -- 两种参数指示的区别, 只有单 - 而且命令的位置参数, 可选参数很清楚 另外参数不用写全, 写头几个字母也行 基本符合现代编程语言参数的调用规范 |
114
mark2025 2023-08-29 09:08:31 +08:00
@eagleoflqj 给你推荐个 google 开发的 npm 包 zx
我现在项目脚本、运维脚本全是 ts/mts 格式。 用 zx 这个包来运行系统原生命令很方便(不需要自己再重复地 spawn/fork )比如 ```ts const { stdout } = await $`git pull origin` console.log({ stdout }) ``` 最方便的是以前在 shell 里面处理循环、字符串、数组很麻烦,现在用 js 来弄太方便了。 **最重要的是脚本有类型保护,开发效率、维护成本(比 py )极大地提高。** 全局装个 tsx 包 www * npmjs * com / package / tsx 然后在 ts 脚本第一行添加 ```ts #!/usr/bin/env tsx ``` 也可以用 `ts-node` 当执行器,全局安装然后 `Hashbang` 改为 ```ts #!/usr/bin/env ts-node-esm ``` 就可以象执行普通 sh 一样执行这个脚本了(并且不需要 tsconfig.json 配置文件) |
115
mengzhuo 2023-08-29 10:15:26 +08:00
说兼容性好的,psh 连 win2019 server 都不支持,我一个写好的 bash 脚本却可以一直用
市场早就用脚投票了 |
116
stcQ2G13k9yxep40 2023-08-29 10:58:36 +08:00 via iPhone
@NessajCN 这个是 bash 吗?而且上面 powershell 是面向对象的,命令输出的是一个数组,可以很方便的遍历每一个文件,然后做修改文件名,复制,删除等操作。
|
117
stcQ2G13k9yxep40 2023-08-29 11:00:41 +08:00 via iPhone
@mengzhuo 你确定用过 powershell 吗? win server2008 都支持(好像是支持 v3 ),2019 怎么会不支持。
|
118
stcQ2G13k9yxep40 2023-08-29 11:04:00 +08:00 via iPhone
好多人只是简单了解了一下,命令没写过几行,对基本的用法和特性都不了解,就武断的下结论。至少写上一两百个脚本或者几十个小程序以后,再做点评吧。
|
119
stcQ2G13k9yxep40 2023-08-29 11:07:35 +08:00 via iPhone
@e3c78a97e0f8 每天一小时,30 天就可以完全掌握,这还是对于小白。如果有其他脚本或变成经验,两三天就可以完全上手。
|
120
NessajCN 2023-08-29 11:10:38 +08:00
@qishouvip2022
敢情你不懂 shell 命令就来说 powershell 比 bash 好用了啊.... 你说的这些都是最基本最基本的操作了 譬如还是上面的命令,你要删除就加个 -exec rm {} find /your/path -type f -name '*test*.doc' -mtime 3 -exec rm {} \; 改名 find /your/path -type f -name '*test*.doc' -mtime 3 -exec mv {} new{} \; 复制 find /your/path -type f -name '*test*.doc' -mtime 3 -exec cp {} new{} \; 你自己对比谁方便吧 |
121
GiantHard 2023-08-29 11:58:38 +08:00
@jrqlxue #83
> 更不确定常用文本处理: `zgrep |cut|sort|uniq -c|sort -nr|head ` 是否有简单 powershell 的实现了 这里面很多都是 gnu coreutils 提供的命令 @NessajCN #120 find 来自 gnu findutils https://www.gnu.org/software/findutils/manual/html_node/find_html/Invoking-find.html#Invoking-find 这些跟 shell 没啥关系,不管是 bash, fish 还是 pwsh ,甚至用 js 也都是可以调用的 |
122
GiantHard 2023-08-29 12:01:15 +08:00
@LitterGopher #94 fish 的适配度也不能跟 bash 相比,fish 无法兼容 bash 语法,真正的一等公民还得是 bash 这类的
|
123
GiantHard 2023-08-29 12:21:12 +08:00
我觉得 pwsh 很方便的地方在于内置了非常丰富的工具: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/?view=powershell-7.3
我之前最常用的是这些:ConvertFrom-Json, ConvertFrom-Csv, ConvertTo-Json, Invoke-WebRequest 用 bash 或者 fish 的话,不借助第三方工具(/usr/bin/ 下面的软件)根本没法实现 |
124
stcQ2G13k9yxep40 2023-08-29 13:17:58 +08:00
@NessajCN 多说无益,你也是没用过 Powershell ,shell 我用得少。
|
125
stcQ2G13k9yxep40 2023-08-29 13:19:06 +08:00
@NessajCN PowerShell 是一种用于自动化任务和管理系统的强大脚本语言和命令行工具,它在 Windows 环境中得到广泛使用。相比传统的命令行 shell (如 Windows 的 CMD 或类 Unix 系统的 Bash ),PowerShell 在很多方面都具有更强大的功能和优势:
1. **对象导向:** PowerShell 强调对象导向的编程范式,它将输出数据封装为对象,而不是简单的文本流。这使得数据处理更为直观和灵活,你可以像操作对象一样处理文件、注册表、服务等系统资源。 2. **强大的管道:** PowerShell 的管道功能允许你将命令的输出直接传递给下一个命令作为输入,实现复杂的数据处理流程。这种管道不仅可以处理文本,还可以处理对象,从而使操作更加富有表现力。 3. **可扩展性:** PowerShell 支持使用 .NET Framework 的类库,以及其他的扩展模块和插件,这使得你可以轻松地利用现有的功能和创建自己的模块。 4. **多种数据格式:** PowerShell 支持多种数据格式,包括文本、XML 、JSON 和 CSV 。这使得数据交换和处理更为方便。 5. **远程管理:** PowerShell 具有强大的远程管理能力,你可以在本地系统上执行命令,也可以在远程计算机上执行,从而实现集中管理。 6. **强大的命令集:** PowerShell 内置了大量的命令(称为 cmdlet ),用于执行各种操作,从文件操作到系统管理,几乎涵盖了操作系统的方方面面。 7. **脚本编写:** PowerShell 是一种完整的脚本语言,允许你编写复杂的脚本来处理任务、自动化流程等。 8. **集成环境:** PowerShell 提供了交互式的命令行界面以及脚本编辑环境,支持智能补全、命令历史等功能。 9. **安全性:** PowerShell 具有严格的执行策略,可以限制脚本的执行权限,从而提高系统的安全性。 10. **跨平台支持:** PowerShell 6 及更高版本已经推出了跨平台版本,称为 PowerShell Core ,可以在 Windows 、Linux 和 macOS 上运行。 总的来说,PowerShell 在系统管理、自动化任务、数据处理等方面具有很大的优势,特别适用于 Windows 环境中的管理和操作。---------from chatgpt |
126
NessajCN 2023-08-29 13:33:59 +08:00
@GiantHard 所以我回复的那位用 Get-ChildItem -Path 来举例 powershell 多好用还搬出 chatgpt 来 blabla 说一大通,我用个 find 来说明有全 shell 通用的更方便工具,哪里不对吗
|
127
iorilu OP 我发这个贴的目的也不是说 pwsh 现在就比 bash 好
我是为了让大家了解下 至少我以前是不了解 pwsh 有这些功能的 所以作为一个有竞争力的技术, 我认为还是可以了解下, 再根据自己需求决定 反正学下没坏处 |
128
CodeCodeStudy 2023-08-29 15:19:09 +08:00
命令太长了,这就是 PowerShell 普及的最大障碍
|
129
iorilu OP |
130
NickHopps 2023-08-29 21:27:26 +08:00
每次看到 psl 就总觉得是 ps1 就觉得这个后缀很怪哈哈
|
131
vvhy 2023-08-30 01:33:12 +08:00
我也在用哈哈,感觉在 windows 上挺有用,写些小脚本什么的,github 上的好多项目也都会提供 powershell 的安装程序
|
132
mark2025 2023-08-30 15:51:49 +08:00
@iorilu pwsh (相比 bash )是非常强大。不过我认为正是这个强大反而是阻碍了其接受度: 命令行简单的输入输出程序裸机搞成交互式程序,明显提升调用、维护、调试的复杂度。
况且服务器 Linux 系统居多,装 pwsh 我不如装 nodejs 了,用 nodejs 来执行系统 bash 命令实现复杂的功能恐怕能力会比 pwsh 更加强大。 pwsh 高不成低不就的。 |
133
equationzhao 2023-08-30 20:42:49 +08:00
|
134
mengzhuo 2023-08-30 21:34:15 +08:00
@qishouvip2022 用过啊,我就在用 win2019 server ,新版的 psh 很多跑不了,装软件还要重启升级,我可不想为了一个 shell 升级服务器。
|
135
zxbiao 2023-08-31 00:48:53 +08:00
powershell 在 Windows 下默认禁止未经数字签名的 PS1 直接运行,因为实在太强大了,连巨硬都只能默认禁止未签名的脚本运行。
如果是有能签名代理证书,那个就实用性比较高。 可惜,除了大公司外,一般的个人可没有代码签名证书。 普通用途的 Windows 下,还是 CMD 配合其他批处理程序或脚本语言比较适合。 或许你会杠说允许未签名的 PS1 脚本允许就行。 大哥,毕竟用户可是傻瓜,怎么会搞这个。 就算会搞这个,一旦由于这个功能被黑了,找谁背锅。 |