是不是掌握 Linux 的 Shell 就可以了?
1
ila 2022-03-05 13:56:12 +08:00 via Android
powershell for linux
|
2
cmdOptionKana 2022-03-05 15:44:40 +08:00 1
shell 的基本操作一共没几个,没什么好学的,大概了解一下就行。如果是指 shell 编程,多数情况可以用 python 来代替。
|
3
ch2 2022-03-05 15:46:13 +08:00
复杂的 shell 写起来不如 python
|
4
MacDows 2022-03-05 15:51:25 +08:00 via Android
如果不用 linux 的话,很好用
|
5
nightwitch 2022-03-05 17:13:23 +08:00
写脚本不如 Python
单纯当个 Shell 的话在 Windows 上还行,但也就是还行的程度,主要的问题是响应太慢 |
6
Tumblr 2022-03-05 17:16:38 +08:00
Windows 运维: 啊?
Active Directory: 啊? Exchange: 啊? Azure: 啊? 在服务器市场中,Windows 服务器占大半,怎么得出来 PowerShell 无用的结论??? |
7
yayiji 2022-03-05 17:28:07 +08:00 via Android 4
PowerShell 是很难写的语言,编程语言表达应该极尽精简,而不是趋向自然语言,像 Apple script 一样,你若不是照着抄,根本记不住在怎么写
|
8
kokutou 2022-03-05 17:40:56 +08:00
搞 Windows 有用, 不搞基本没啥用
|
9
Tumblr 2022-03-05 18:26:59 +08:00
@yayiji #7 好像“PowerShell 是很难写的语言”的依据是什么呢?😅只是层主个人感觉,还是有调研数据支撑呢?
不管 reddit 上还是 quora 上,更多的是 it's very easy 。 另外,你需要明确的是,PowerShell 只是个脚本语言,而不是编程语言(狭义上的),所以一般都是说 scripting 而不是 programming 。PowerShell 也没指望让大家记得每个 cmdlet 的字母和每个 parameter 的拼写,所以有非常强大的自动补全功能。 说到 PowerShell 了,前段时间我们有个年薪 40~50 万的运维岗,主要就是 PowerShell 挡路了,国内 PowerShell 比较好、英语又比较好的运维好难找啊,招了半年没招到。 |
10
plko345 2022-03-05 18:34:44 +08:00 via Android 1
@Tumblr 那可以把优秀的招进来学,开发不也类似吗,有的不会 go ,java ,但人优秀,都可以再学
|
11
Tumblr 2022-03-05 19:00:12 +08:00
@plko345 #10 人家一看要求,简历都不投了,哪里去招啊?😅
不过,死在英语上的更多,是一个 global team ,平时开会什么的,英语是刚需。 |
12
pigspy 2022-03-05 19:19:07 +08:00
我觉得 powershell 挺好用的,用 vscode 方便调试,而且类型严格
|
13
MonoLogueChi 2022-03-05 19:20:32 +08:00 via Android
不做 Windows 运维,powershell 当然是没什么用了。Windows 运维的话,powershell 肯定躲不过去,即使是用 Python ,也躲不过 Python 中执行 powershell 命令
|
14
hez2010 2022-03-05 19:28:04 +08:00
开源项目里面非常多的构建脚本都是 powershell 写的,因为可以跨平台跑并且自带的库非常齐全。如果用 python 写的话经常会遇到要额外用 pip 装包的情况。
|
15
lovegoogle 2022-03-05 20:42:59 +08:00 1
Python 跨平台,运维最爱的程序之一,如果公司的生态本身不支持 Python ,再好用也等于无用。。
|
16
2NUT 2022-03-05 20:49:34 +08:00 2
powershell 在微软的定位是 替代 cmd, 对标 linux 上的 sh
地位老高了, 所有操作都有 api 比如你用 scoop 的话, 它就是 powershell 写的 |
17
BrettD 2022-03-05 20:52:32 +08:00 via iPhone
公司业务在 Windows 技术栈上面的话,PowerShell 是非常重要的,CI/CD 或者各种自动化脚本都要用到
|
18
mogging 2022-03-05 21:36:56 +08:00
域控相关的自动化,IIS 相关的一键搭建环境和部署
|
19
Cooky 2022-03-05 21:49:46 +08:00
MS 产品专用,其他地方用实在是没什么意义
|
20
forgottencoast 2022-03-05 21:57:11 +08:00
@2NUT 关键是所有的操作都有 api 这个,没有它干不了的。
|
22
zhuangzhuang1988 2022-03-05 22:49:47 +08:00
可以调试+自动补全 就比被的 shell 好很多了
|
23
ysc3839 2022-03-05 23:04:12 +08:00 via Android
个人认为用作交互式 shell 不好用,但是写脚本还是有用的
|
24
twl007 2022-03-05 23:05:53 +08:00 via iPhone
如果你要是打算去 MS 工作 还是有用的 如果平时还是 Linuz 多 那可能真没啥用😑
|
25
jdjingdian 2022-03-05 23:07:39 +08:00
powershell 我觉得不好用,但是有些时候是有用的
比如我要给 ESXi 的安装镜像封装一些官方没有的驱动,就可以用 powershell 的脚本来给镜像打驱动 |
26
VanceKing 2022-03-05 23:16:28 +08:00 via Android
在 Windows 上用命令行还是很方便
|
27
fengsien1999 OP 是不是国内除了微软自己,Windows 服务器的岗很少?你司的岗是在哪里发布的 工作地点在哪里?
|
28
fengsien1999 OP @VanceKing 在 windows 上一般用 cmd 。去年 11 月看一本书《笨办法学 Python3 》,书中用 PowerShell 作为 CLI ,但是也就用到讲 PowerShell 的一本书中的百分之二、三。其余时间没用过 PowerShell
|
29
wittyfans 2022-03-05 23:45:31 +08:00 via iPhone
以前做运维的时候,用 powershell + pdq 自动部署软件,自动卸载重装用户软件或者改配置什么的太香了。
|
30
kenvix 2022-03-06 00:20:54 +08:00 via Android
你知道许多 windows api 只提供 powershell 接口吗
|
31
germain 2022-03-06 00:31:46 +08:00 via iPhone
搞得好像只有在 Microsoft 工作才用 PowerShell 一样😂
|
32
darklights 2022-03-06 00:34:09 +08:00
如果是面向工资编程,完全没必要主动去学。
如果是需求导向,可以花少许时间学一学语法和常用命令,做一些任务比通用脚本方便。 个人评价的话,至少对我这种不用 Linux 也不经常玩小黑窗的,PowerShel 比隔壁的鬼画符易学易写,会一些基础后,基本上可以靠文档和智能提示,边摸索边解决问题。当然,比自家的 bat 好一百倍。 |
33
Osk 2022-03-06 00:50:51 +08:00
powershell 背靠 .net, 强大, 补全强大, 但是那语法真的是... 奇怪.
Windows 上 powershell 是真的强, 系统管理等用途简直是神器. 我自己用 powershell 偶尔写一些小工具, 比如一键设置针对某个程序的防火墙规则什么的. 有段时间我要用 hyper-v 来测试虚拟机, 用 powershell 做了个脚本一键克隆虚拟机模板 (一个准备好的 vhdx + json 记录模板信息), 用起来很方便了. 不过就算如此, 我还是想说 powershell 语言语法本身没有啥非用不可的特性, 我用它的原因很大一部分是它背靠 .net, 一堆 api 和 cmdlet 可以直接调用, 如果没有这些, 谁用它... 也就是说某种意义上的生态良好. 另外, 想对 powershell 和 .net 的差评就是, 不能 portable: 写个 .net 工具, 结果 Win 7 带 .net 3.5, Win 8+ 带 4.0+, 就很迷茫. 对于运维中来说, 很糟糕, 你不想现场给破电脑部署 .net 3 或者 .net 4. powershell 也是, 写个小脚本, 好强大呀, 几行就搞定了, 结果 Win 7 一跑, 哦豁, ps 版本过低, 这个 cmdlet 没有, 那个也没有. 用 Win 7 的 ps 版本做基础开发? 算了, 还是 cmd 或者 python 吧. 有时候真的不介意最终 exe/dll 文件很大带上运行时库, 但很介意需要运行时装这装那. |
34
lonewolfakela 2022-03-06 00:56:40 +08:00
@Osk “有时候真的不介意最终 exe/dll 文件很大带上运行时库, 但很介意需要运行时装这装那.”
呃,所以 .Net 6 和 PowerShell 7 欢迎您? |
35
dcsuibian 2022-03-06 01:09:52 +08:00
值得学,毕竟 windows 还有 74%的市场占有率呢
|
36
snw 2022-03-06 02:59:37 +08:00 via Android
不只是运维,我个人电脑也会用到 powershell ,因为 Win10 的设置太残废了,曾经强大的控制面板也被祸祸到半残。
不过我也遇到过设置面板里有的功能却找不到 powershell 对应命令,虽然理论上肯定是有的。 |
37
BrettD 2022-03-06 03:29:47 +08:00 via iPhone
@fengsien1999 银行行业里 Windows 技术栈的使用还是不少的,其他传统行业或者 2B 业务估计也是
|
38
20150517 2022-03-06 07:01:26 +08:00 via iPad
这恶心的语法看了就不想用
|
39
g00001 2022-03-06 07:19:49 +08:00
有些简单的事搞太复杂了也不一定好,
就像 GIF 截个屏吧,.Net 写的 ScreenToGif 一个 EXE 文件 158 MB ,复制个 GIF 都不行。 而 aardio 写的 Gif123 就几百 KB , 一键复制 GIF ,可以粘贴到其他程序里不会变空白,变静态图像、无效图像。 如果不习惯 PowerShell , 可以试试 aardio 里调用 PowerShell 会比较轻便。 一、aardio 导入 PowerShell Cmdlet 直接使用(内存嵌入、免安装): import dotNet; Cmdlets = dotNet.loadFile($"\PowerShell\AudioDeviceCmdlets.dll"); CoreAudioApi = Cmdlets.import("CoreAudioApi"); var mmDeviceEnumerator = CoreAudioApi.MMDeviceEnumerator() 二、aardio 执行 PowerShell 命令 import dotNet.ps; var result = dotNet.ps.command("Get-Command",{Name="*Process"}); 三、aardio 通过管道调用 PowerShell import process.popen; var prcs = process.popen.ps(`-Command "& {Get-Command -Name *Process}"`); var result = prcs.read(-1); |
40
imycc 2022-03-06 08:22:55 +08:00 1
搞 windows 服务器维护,或者在自己电脑上折腾些小玩意的时候很有用。做一些系统配置,可以直接用 powershell 一两条命令搞定,微软官网的文档也算全面,能很方便搜到。如果用 python 做,不一定有库支持,或者实现方式比较怪。
powershell 能调用.net 类库,能写非常复杂的功能,不过我断断续续用了一两年,也没用多深入。当面对复杂需求的时候,更倾向于将具体跟系统交互的部分写成 ps1 脚本,然后用 python 调用它。 在学习新技能方面我觉得“够用就好”,根据工作需要来。我们都是一块砖,那里需要往哪搬 |
41
yanmu6626 2022-03-06 08:48:33 +08:00
说实话,对于纯搞开发来说,真没觉得有啥好用的,用它我用 py 不行吗,还有人说 ps 比 py 好用,看见语法,我个人表示 py 真的比 ps 好理解一些
|
43
dbpe 2022-03-06 09:55:41 +08:00
windows 服务器真的有那么大占比么?
|
45
ejdjxidbsn 2022-03-06 10:53:03 +08:00
azure 人人都要写 powershell (悲)
|
46
zhangjinghua 2022-03-06 10:54:08 +08:00
我一个删除文件夹都没搞明白,powershell 和批处理是不是不一个玩意啊。。。。。。。
|
47
duke807 2022-03-06 11:24:59 +08:00 via Android
如果選擇了 windows ,沒用也要学,windows 下沒用的玩意還少嗎,vbs 、bat 、mfc 、win32 、visual basic 、asp … 還有當年學校教編程只教了沒用的 foxpro ,我是 07 界的應用電子技術的學生(應該教 c 才對,但是沒教,垃圾學校)
反觀 linux ,幾十年前學的 shell script ,到現在依然是主流,學的東西都基本不會過時 |
48
Osk 2022-03-06 11:40:10 +08:00
@zhangjinghua 可以说完全不一样, powershell 里面一些看起来像 cmd / linux shell 里面一些工具的东西, 比如 ls rd md 什么的, 他都是 powershell 原生命令的 alias, 继续用 alias 会容易混淆, 用相应的原生命令替换了吧.
删除命令是 remove-item, 可能他有一个 alias 叫 rd , 但他和 cmd 的 rd 完全是两个东西. |
49
aloxaf 2022-03-06 11:48:17 +08:00
@yayiji
> 编程语言表达应该极尽精简 你是认真的吗…… 建议去 codegolf.stackexchange.com 上看看,上面有很多人会教你如何用「极尽精简」的语言来解决问题,比如用 J 语言求 0~1000 内 3 和 5 的倍数之和:+/(#~[:+./0=3 5|/])i.1000 |
50
w4087 2022-03-06 12:33:20 +08:00
powershell 为啥敢叫这个名字不是没道理的
|
51
wjswxp 2022-03-06 13:07:51 +08:00
> 个人认为用作交互式 shell 不好用,但是写脚本还是有用的
同感。pwsh 相比 bash 有参数的类型系统,不必借助 sed awk 能够处理字符串,写起来也感觉更可靠。 但语法不统一的问题,使学习过程很令人迷惑。 举几个例子: ```ps1 # 借助 C# String 类型的方法 if ([string]::IsNullOrEmpty($s)) { $s = "default-value" } # 使用 PowerShell 内置操作符的写法不同 -match if ($s -match $regex_pattern) { # use $Matches } # 没有比较直觉的 "==" 而是 "-eq"(一致却不常规 if ($s -eq "sth") { # ... } # 调用 PowerShell Cmdlet 的传参写法又有不同 # 为了使用内一表达式其结果(这里取反),要用 () 或 $() 包起来 if (-not (Test-Path -Path "path/to/not-exist")) { # ... } # 如果想在传参时写表达式,同上,要用 () $() 包起来 $a = Join-Path -Path (Resolve-Path -Path ".") "filename" ``` ```ps1 # 这里的 Add() 不 Out-Null 会 Out-Default ,如果在脚本的最外层那就是向 stdout 输出 $dict = [System.Collections.Generic.Dictionary[string, string]]::new() $dict.Add("key", "value") | Out-Null # pwsh 函数的返回值就是函数内的输出,参见文档 "about_Return" function foo() { # 赋值语句不会 Out-Default $s = "Hello" # 结尾没有 ";" 的表达式会 Out-Default $s # return 仅表示跳出 return } $a = foo() # "Hello" # 但是在 PowerShell 5 起引入了 class 支持,在 class 里 return 符合常规编程语言的直觉 # 看文档吧 "about_Classes" ``` |
52
wjswxp 2022-03-06 13:15:00 +08:00
|
53
Tumblr 2022-03-06 13:33:03 +08:00
@Xhack #42 @dbpe #43 看到过一个数据,2018 年六月底到 2019 年六月底,Windows Server 从 71.9%上升到 72.8%,Linux 从 12.9%上升到 13.2%。https://www.statista.com/statistics/915085/global-server-share-by-os/
也有人给过我一个数据( https://w3techs.com/technologies/overview/operating_system ),说 Linux 占 8 成,不过这有个误区,并不是所有的 server 都是 web server ,这个链接只针对 website server ,所以我更倾向于上面那个数据。 |
54
Tumblr 2022-03-06 13:37:28 +08:00
@Osk #48 Remove-Item 的 alias 其实有好几个了:
del -> Remove-Item erase -> Remove-Item rd -> Remove-Item ri -> Remove-Item rm -> Remove-Item rmdir -> Remove-Item 其实也是个使用习惯,Linux 下遇到不会的知道 -h 一下,PowerShell 里不会的就是不会了,很少有人去 help 一下 。 |
55
sunhelter 2022-03-06 13:52:24 +08:00
@fengsien1999 你也太局限了,实体行业基本很多都是 windows server ,运维门槛低。
|
56
jim9606 2022-03-06 14:28:37 +08:00
因为你不搞 Windows 运维。
相当多的 Windows 管理命令是只能用 Powershell 执行的,例如 MSIX 软件包(商店应用)管理的几个命令。觉得用不上是因为复杂的操作都跑去 GUI 了,Linux 一般没这个路线。 |
57
darklights 2022-03-06 14:38:18 +08:00
|
58
ciaoly 2022-03-06 16:24:35 +08:00 via Android
PowerShell 真的很好用啊🥲
|
59
SenLief 2022-03-06 16:40:22 +08:00
windows 服务器运维还是在用的。
|
60
fengsien1999 OP @SenLief windows 服务器运维的岗位在国内是不是很少?
|
61
fengsien1999 OP @jim9606 服务器运维的岗位在国内是不是很少?
|
62
imn1 2022-03-06 17:05:30 +08:00
|
63
james122333 2022-03-06 19:11:58 +08:00 via Android
就算这工具有 linux 版也不会去使用 真的不如直接写其它语言 而且 shell 已经够 power
我都有一个自己的库 也实现了命名空间 对象功能正在研究 |
64
janxin 2022-03-06 19:28:44 +08:00 via iPhone
windows 运维缓缓打出个?
|
65
playboy0 2022-03-06 19:43:09 +08:00
想学 powershell 只能看官方文档吗,感觉视频资料很少啊
|
66
tankren 2022-03-06 19:54:40 +08:00
公司里面挺好用的 增强生产力
|
67
fengsien1999 OP @playboy0 有书
|
68
CallMeReznov 2022-03-06 21:05:56 +08:00
powershell 是微软这些年开始干正事的第一个作品.
|
69
alsas 2022-03-06 22:34:13 +08:00
复杂的 shell 直接用 python 代替
|
70
FrankHB 2022-03-06 22:36:04 +08:00 2
这不是现在的问题,以前的分析 https://www.v2ex.com/t/743334#r_10060656 仍然适用。
长话短说:只会习惯 Windows 体系的运维或许有用。 别的地方用没用另说,但有时候显然不如不用。 就不适合开发人员写脚本,再补个以前遇到的案例: https://github.com/flutter/flutter/issues/12666#issuecomment-636497901 很显然 PowerShell 脚本的作者没考虑到一些日常应该考虑到的简单情况,结果让行为变得极其愚蠢。 这不是说 bug 就是 PowerShell 特供的,但事实上这个功能在对应的 UNIX shell 脚本里就没问题。这间接体现出保证 PowerShell 脚本质量大约比 UNIX shell 更困难,即便后者坑已经够多了。 况且要求装个 pwsh 只是勉强算简便,实际装的东西比起 MSYS 之类也并不轻便(还是隐含.NET 依赖的情况),还不提 MSYS 普遍比 pwsh 甚至系统自带的 PowerShell 的可用性都好。(现在 Windows 都自带 curl ,写个一行安装 MSYS2 的也不是不行,PowerShell 这时候比 cmd 方便的地方就更像当年 Edge“用来下载别的浏览器的浏览器”了。) Windows 开发者的确也有不少和 LZ 现在这样想的更熟悉类 UNIX shell 懒得碰 PowerShell 来偷懒的,特别是不愿意依赖.NET 这种精神 COM 包袱的纯粹本机开发者和跨平台开发者。所以说即便照顾 Windows 用户,PowerShell 这个选项也基本是多余的。 这也再次显示出 PowerShell 提供的不同的 shell 特性并不能有效地防止一些编程错误,需要正经的脚本程序不如用健全一点的常规“脚本语言”。 |
71
fsdrw08 2022-03-06 23:01:34 +08:00 via Android
@Tumblr 感觉你好像是在找我啊…我敢说自己精通 powershell ,英语没问题,对,我就是外企 HelpDesk
|
72
raptor 2022-03-07 10:01:19 +08:00
70 楼说得很清楚。
很多年前就听说 PS 号称很 NB ,比 SHELL 强一百倍啊一百倍,结果前一阵听几个老司机私下吐槽才知道,居然有不少在 SHELL 里很简单常用的功能,居然在 PS 里要写一大堆代码(有些还是微软官方答复)。看来所谓好用不过是操作 windows 特有功能时方便。 |
73
dawangyezi 2022-03-07 10:19:34 +08:00
我近一年一直在做 windows 游戏开发。经常用到 ps 做自动化的一些东西。习惯了就觉得蛮好用的。
有没有用毕竟是看使用场景的嘛。如果你经常在类 unix 机器上开发,那肯定觉得不如 bash ,zsh 这些好用。 因为微软官方为 ps 提供跨平台的实现。所以一些跨平台的脚本也可能是使用 ps 的。 我知道的应用场景里面,亚马逊云的 lambda 就提供了 ps 作为一种内置提供的 runtime ,而不是 bash ,zsh 这些。 |
74
wangtian2020 2022-03-07 10:55:02 +08:00
至少可以替代 cmd ,vscode 的 powershell 明显比 cmd 好用
|
75
visonnn 2022-03-07 15:23:05 +08:00
管理 AD 、Exchange 、Microsoft 365 的大量操作都需要 PowerShell 啦。
确实像上面有老哥说的,面向工资的话没什么需要学。 |
76
asm 2022-03-07 17:10:45 +08:00
现在好多恶意代码都开始用 powershell 写了,闹呢~~
|