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

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

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

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

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

大家都默认这样就不错

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

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

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

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

有兴趣的可以了解下

19813 次点击
所在节点    程序员
135 条回复
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 也都是可以调用的
GiantHard
2023-08-29 12:01:15 +08:00
@LitterGopher #94 fish 的适配度也不能跟 bash 相比,fish 无法兼容 bash 语法,真正的一等公民还得是 bash 这类的
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/ 下面的软件)根本没法实现
stcQ2G13k9yxep40
2023-08-29 13:17:58 +08:00
@NessajCN 多说无益,你也是没用过 Powershell ,shell 我用得少。
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
NessajCN
2023-08-29 13:33:59 +08:00
@GiantHard 所以我回复的那位用 Get-ChildItem -Path 来举例 powershell 多好用还搬出 chatgpt 来 blabla 说一大通,我用个 find 来说明有全 shell 通用的更方便工具,哪里不对吗
iorilu
2023-08-29 14:51:08 +08:00
我发这个贴的目的也不是说 pwsh 现在就比 bash 好

我是为了让大家了解下

至少我以前是不了解 pwsh 有这些功能的

所以作为一个有竞争力的技术, 我认为还是可以了解下, 再根据自己需求决定

反正学下没坏处
CodeCodeStudy
2023-08-29 15:19:09 +08:00
命令太长了,这就是 PowerShell 普及的最大障碍
iorilu
2023-08-29 15:38:29 +08:00
@CodeCodeStudy 这个到没啥, 都有 alias 的, 也可以自定义

微软的意思是,初学时尽量使用全名, 熟悉了就随便你了

但就像代码一样, 现在都讲究易读第一, 不是什么谁代码写的短就牛
NickHopps
2023-08-29 21:27:26 +08:00
每次看到 psl 就总觉得是 ps1 就觉得这个后缀很怪哈哈
vvhy
2023-08-30 01:33:12 +08:00
我也在用哈哈,感觉在 windows 上挺有用,写些小脚本什么的,github 上的好多项目也都会提供 powershell 的安装程序
mark2025
2023-08-30 15:51:49 +08:00
@iorilu pwsh (相比 bash )是非常强大。不过我认为正是这个强大反而是阻碍了其接受度: 命令行简单的输入输出程序裸机搞成交互式程序,明显提升调用、维护、调试的复杂度。

况且服务器 Linux 系统居多,装 pwsh 我不如装 nodejs 了,用 nodejs 来执行系统 bash 命令实现复杂的功能恐怕能力会比 pwsh 更加强大。
pwsh 高不成低不就的。
equationzhao
2023-08-30 20:42:49 +08:00
@LitterGopher
New-Alias 的别名是 nal
`New-Alias -Name gh -Value Get-Help ` -> `nal gh Get-Help`
mengzhuo
2023-08-30 21:34:15 +08:00
@qishouvip2022 用过啊,我就在用 win2019 server ,新版的 psh 很多跑不了,装软件还要重启升级,我可不想为了一个 shell 升级服务器。
zxbiao
2023-08-31 00:48:53 +08:00
powershell 在 Windows 下默认禁止未经数字签名的 PS1 直接运行,因为实在太强大了,连巨硬都只能默认禁止未签名的脚本运行。
如果是有能签名代理证书,那个就实用性比较高。
可惜,除了大公司外,一般的个人可没有代码签名证书。
普通用途的 Windows 下,还是 CMD 配合其他批处理程序或脚本语言比较适合。

或许你会杠说允许未签名的 PS1 脚本允许就行。
大哥,毕竟用户可是傻瓜,怎么会搞这个。
就算会搞这个,一旦由于这个功能被黑了,找谁背锅。

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

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

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

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

© 2021 V2EX