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

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

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

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

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

大家都默认这样就不错

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

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

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

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

有兴趣的可以了解下

19782 次点击
所在节点    程序员
135 条回复
6bsLo69Qdu3RPY4c
2023-08-27 16:05:01 +08:00
python 新手学需要多久
@tairan2006
iorilu
2023-08-27 16:05:33 +08:00
@tux pwsh 太强大, 能做任何事

默认是不允许执行下载脚本的
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
2023-08-27 17:00:40 +08:00
好几年前只有.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
2023-08-27 17:05:08 +08:00
Powershell 大致可以理解为“Shell 夏普”language ,就是 C 夏普、F 夏普里那个夏普

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

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

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

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

比如我 Get-WMI 就能去拿设备管理器名单,Python 就得绕圈子
iorilu
2023-08-27 18:12:00 +08:00
@acctv2 pwsh 是完全支持.net 库的, 返回对象都一样的
如果有用的上地方, 肯定远比 python 强啊
拿 python 来比, 还是以为只是处理字符串把
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
2023-08-27 19:27:59 +08:00
很巧今天就写了一个很简单的脚本,用来一次启动两个程序,遇到了两个问题
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
2023-08-27 19:35:57 +08:00
我在 debian 上脚本都是 go+bash
win 上早就是 ps 了
各种 go py 能做的它都能做

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

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

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

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

© 2021 V2EX