是不是掌握 Linux 的 Shell 就可以了?
|      1ila      2022-03-05 13:56:12 +08:00 via Android powershell for linux | 
|  |      2cmdOptionKana      2022-03-05 15:44:40 +08:00  1 shell 的基本操作一共没几个,没什么好学的,大概了解一下就行。如果是指 shell 编程,多数情况可以用 python 来代替。 | 
|  |      3ch2      2022-03-05 15:46:13 +08:00 复杂的 shell 写起来不如 python | 
|      4MacDows      2022-03-05 15:51:25 +08:00 via Android 如果不用 linux 的话,很好用 | 
|      5nightwitch      2022-03-05 17:13:23 +08:00 写脚本不如 Python 单纯当个 Shell 的话在 Windows 上还行,但也就是还行的程度,主要的问题是响应太慢 | 
|  |      6Tumblr      2022-03-05 17:16:38 +08:00 Windows 运维: 啊? Active Directory: 啊? Exchange: 啊? Azure: 啊? 在服务器市场中,Windows 服务器占大半,怎么得出来 PowerShell 无用的结论??? | 
|  |      7yayiji      2022-03-05 17:28:07 +08:00 via Android  4 PowerShell 是很难写的语言,编程语言表达应该极尽精简,而不是趋向自然语言,像 Apple script 一样,你若不是照着抄,根本记不住在怎么写 | 
|  |      8kokutou      2022-03-05 17:40:56 +08:00 搞 Windows 有用, 不搞基本没啥用 | 
|  |      9Tumblr      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 比较好、英语又比较好的运维好难找啊,招了半年没招到。 | 
|  |      10plko345      2022-03-05 18:34:44 +08:00 via Android  1 @Tumblr 那可以把优秀的招进来学,开发不也类似吗,有的不会 go ,java ,但人优秀,都可以再学 | 
|  |      11Tumblr      2022-03-05 19:00:12 +08:00 @plko345 #10 人家一看要求,简历都不投了,哪里去招啊?😅  不过,死在英语上的更多,是一个 global team ,平时开会什么的,英语是刚需。 | 
|      12pigspy      2022-03-05 19:19:07 +08:00 我觉得 powershell 挺好用的,用 vscode 方便调试,而且类型严格 | 
|      13MonoLogueChi      2022-03-05 19:20:32 +08:00 via Android 不做 Windows 运维,powershell 当然是没什么用了。Windows 运维的话,powershell 肯定躲不过去,即使是用 Python ,也躲不过 Python 中执行 powershell 命令 | 
|      14hez2010      2022-03-05 19:28:04 +08:00 开源项目里面非常多的构建脚本都是 powershell 写的,因为可以跨平台跑并且自带的库非常齐全。如果用 python 写的话经常会遇到要额外用 pip 装包的情况。 | 
|  |      15lovegoogle      2022-03-05 20:42:59 +08:00  1 Python 跨平台,运维最爱的程序之一,如果公司的生态本身不支持 Python ,再好用也等于无用。。 | 
|  |      162NUT      2022-03-05 20:49:34 +08:00  2 powershell 在微软的定位是 替代 cmd, 对标 linux 上的 sh 地位老高了, 所有操作都有 api 比如你用 scoop 的话, 它就是 powershell 写的 | 
|  |      17BrettD      2022-03-05 20:52:32 +08:00 via iPhone 公司业务在 Windows 技术栈上面的话,PowerShell 是非常重要的,CI/CD 或者各种自动化脚本都要用到 | 
|  |      18mogging      2022-03-05 21:36:56 +08:00 域控相关的自动化,IIS 相关的一键搭建环境和部署 | 
|  |      19Cooky      2022-03-05 21:49:46 +08:00 MS 产品专用,其他地方用实在是没什么意义 | 
|      20forgottencoast      2022-03-05 21:57:11 +08:00 @2NUT 关键是所有的操作都有 api 这个,没有它干不了的。 | 
|  |      22zhuangzhuang1988      2022-03-05 22:49:47 +08:00 可以调试+自动补全 就比被的 shell 好很多了 | 
|  |      23ysc3839      2022-03-05 23:04:12 +08:00 via Android 个人认为用作交互式 shell 不好用,但是写脚本还是有用的 | 
|      24twl007      2022-03-05 23:05:53 +08:00 via iPhone 如果你要是打算去 MS 工作 还是有用的 如果平时还是 Linuz 多 那可能真没啥用😑 | 
|      25jdjingdian      2022-03-05 23:07:39 +08:00 powershell 我觉得不好用,但是有些时候是有用的 比如我要给 ESXi 的安装镜像封装一些官方没有的驱动,就可以用 powershell 的脚本来给镜像打驱动 | 
|      26VanceKing      2022-03-05 23:16:28 +08:00 via Android 在 Windows 上用命令行还是很方便 | 
|      27fengsien1999 OP 是不是国内除了微软自己,Windows 服务器的岗很少?你司的岗是在哪里发布的  工作地点在哪里? | 
|      28fengsien1999 OP @VanceKing 在 windows 上一般用 cmd 。去年 11 月看一本书《笨办法学 Python3 》,书中用 PowerShell 作为 CLI ,但是也就用到讲 PowerShell 的一本书中的百分之二、三。其余时间没用过 PowerShell | 
|  |      29wittyfans      2022-03-05 23:45:31 +08:00 via iPhone 以前做运维的时候,用 powershell + pdq 自动部署软件,自动卸载重装用户软件或者改配置什么的太香了。 | 
|      30kenvix      2022-03-06 00:20:54 +08:00 via Android 你知道许多 windows api 只提供 powershell 接口吗 | 
|  |      31germain      2022-03-06 00:31:46 +08:00 via iPhone 搞得好像只有在 Microsoft 工作才用 PowerShell 一样😂 | 
|      32darklights      2022-03-06 00:34:09 +08:00 如果是面向工资编程,完全没必要主动去学。 如果是需求导向,可以花少许时间学一学语法和常用命令,做一些任务比通用脚本方便。 个人评价的话,至少对我这种不用 Linux 也不经常玩小黑窗的,PowerShel 比隔壁的鬼画符易学易写,会一些基础后,基本上可以靠文档和智能提示,边摸索边解决问题。当然,比自家的 bat 好一百倍。 | 
|  |      33Osk      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 文件很大带上运行时库, 但很介意需要运行时装这装那. | 
|      34lonewolfakela      2022-03-06 00:56:40 +08:00 @Osk “有时候真的不介意最终 exe/dll 文件很大带上运行时库, 但很介意需要运行时装这装那.”   呃,所以 .Net 6 和 PowerShell 7 欢迎您? | 
|      35dcsuibian      2022-03-06 01:09:52 +08:00 值得学,毕竟 windows 还有 74%的市场占有率呢 | 
|  |      36snw      2022-03-06 02:59:37 +08:00 via Android 不只是运维,我个人电脑也会用到 powershell ,因为 Win10 的设置太残废了,曾经强大的控制面板也被祸祸到半残。 不过我也遇到过设置面板里有的功能却找不到 powershell 对应命令,虽然理论上肯定是有的。 | 
|  |      37BrettD      2022-03-06 03:29:47 +08:00 via iPhone @fengsien1999 银行行业里 Windows 技术栈的使用还是不少的,其他传统行业或者 2B 业务估计也是 | 
|  |      3820150517      2022-03-06 07:01:26 +08:00 via iPad 这恶心的语法看了就不想用 | 
|      39g00001      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); | 
|  |      40imycc      2022-03-06 08:22:55 +08:00  1 搞 windows 服务器维护,或者在自己电脑上折腾些小玩意的时候很有用。做一些系统配置,可以直接用 powershell 一两条命令搞定,微软官网的文档也算全面,能很方便搜到。如果用 python 做,不一定有库支持,或者实现方式比较怪。 powershell 能调用.net 类库,能写非常复杂的功能,不过我断断续续用了一两年,也没用多深入。当面对复杂需求的时候,更倾向于将具体跟系统交互的部分写成 ps1 脚本,然后用 python 调用它。 在学习新技能方面我觉得“够用就好”,根据工作需要来。我们都是一块砖,那里需要往哪搬 | 
|  |      41yanmu6626      2022-03-06 08:48:33 +08:00 说实话,对于纯搞开发来说,真没觉得有啥好用的,用它我用 py 不行吗,还有人说 ps 比 py 好用,看见语法,我个人表示 py 真的比 ps 好理解一些 | 
|      43dbpe      2022-03-06 09:55:41 +08:00 windows 服务器真的有那么大占比么? | 
|      45ejdjxidbsn      2022-03-06 10:53:03 +08:00 azure 人人都要写 powershell (悲) | 
|  |      46zhangjinghua      2022-03-06 10:54:08 +08:00 我一个删除文件夹都没搞明白,powershell 和批处理是不是不一个玩意啊。。。。。。。 | 
|      47duke807      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 ,到現在依然是主流,學的東西都基本不會過時 | 
|  |      48Osk      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 完全是两个东西. | 
|      49aloxaf      2022-03-06 11:48:17 +08:00 @yayiji   > 编程语言表达应该极尽精简 你是认真的吗…… 建议去 codegolf.stackexchange.com 上看看,上面有很多人会教你如何用「极尽精简」的语言来解决问题,比如用 J 语言求 0~1000 内 3 和 5 的倍数之和:+/(#~[:+./0=3 5|/])i.1000 | 
|  |      50w4087      2022-03-06 12:33:20 +08:00 powershell 为啥敢叫这个名字不是没道理的 | 
|  |      51wjswxp      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" ``` | 
|  |      52wjswxp      2022-03-06 13:15:00 +08:00 | 
|  |      53Tumblr      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 ,所以我更倾向于上面那个数据。 | 
|  |      54Tumblr      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 一下 。 | 
|  |      55sunhelter      2022-03-06 13:52:24 +08:00 @fengsien1999 你也太局限了,实体行业基本很多都是 windows server ,运维门槛低。 | 
|  |      56jim9606      2022-03-06 14:28:37 +08:00 因为你不搞 Windows 运维。 相当多的 Windows 管理命令是只能用 Powershell 执行的,例如 MSIX 软件包(商店应用)管理的几个命令。觉得用不上是因为复杂的操作都跑去 GUI 了,Linux 一般没这个路线。 | 
|      57darklights      2022-03-06 14:38:18 +08:00 | 
|      58ciaoly      2022-03-06 16:24:35 +08:00 via Android PowerShell 真的很好用啊🥲 | 
|  |      59SenLief      2022-03-06 16:40:22 +08:00 windows 服务器运维还是在用的。 | 
|      60fengsien1999 OP @SenLief windows 服务器运维的岗位在国内是不是很少? | 
|      61fengsien1999 OP @jim9606 服务器运维的岗位在国内是不是很少? | 
|  |      62imn1      2022-03-06 17:05:30 +08:00 | 
|      63james122333      2022-03-06 19:11:58 +08:00 via Android 就算这工具有 linux 版也不会去使用   真的不如直接写其它语言   而且 shell 已经够 power 我都有一个自己的库 也实现了命名空间 对象功能正在研究 | 
|  |      64janxin      2022-03-06 19:28:44 +08:00 via iPhone windows 运维缓缓打出个? | 
|  |      65playboy0      2022-03-06 19:43:09 +08:00 想学 powershell 只能看官方文档吗,感觉视频资料很少啊 | 
|      66tankren      2022-03-06 19:54:40 +08:00 公司里面挺好用的 增强生产力 | 
|      67fengsien1999 OP @playboy0 有书 | 
|      68CallMeReznov      2022-03-06 21:05:56 +08:00 powershell 是微软这些年开始干正事的第一个作品. | 
|      69alsas      2022-03-06 22:34:13 +08:00 复杂的 shell 直接用 python 代替 | 
|  |      70FrankHB      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 特性并不能有效地防止一些编程错误,需要正经的脚本程序不如用健全一点的常规“脚本语言”。 | 
|      71fsdrw08      2022-03-06 23:01:34 +08:00 via Android @Tumblr 感觉你好像是在找我啊…我敢说自己精通 powershell ,英语没问题,对,我就是外企 HelpDesk | 
|  |      72raptor      2022-03-07 10:01:19 +08:00 70 楼说得很清楚。 很多年前就听说 PS 号称很 NB ,比 SHELL 强一百倍啊一百倍,结果前一阵听几个老司机私下吐槽才知道,居然有不少在 SHELL 里很简单常用的功能,居然在 PS 里要写一大堆代码(有些还是微软官方答复)。看来所谓好用不过是操作 windows 特有功能时方便。 | 
|      73dawangyezi      2022-03-07 10:19:34 +08:00 我近一年一直在做 windows 游戏开发。经常用到 ps 做自动化的一些东西。习惯了就觉得蛮好用的。 有没有用毕竟是看使用场景的嘛。如果你经常在类 unix 机器上开发,那肯定觉得不如 bash ,zsh 这些好用。 因为微软官方为 ps 提供跨平台的实现。所以一些跨平台的脚本也可能是使用 ps 的。 我知道的应用场景里面,亚马逊云的 lambda 就提供了 ps 作为一种内置提供的 runtime ,而不是 bash ,zsh 这些。 | 
|  |      74wangtian2020      2022-03-07 10:55:02 +08:00 至少可以替代 cmd ,vscode 的 powershell 明显比 cmd 好用 | 
|  |      75visonnn      2022-03-07 15:23:05 +08:00 管理 AD 、Exchange 、Microsoft 365 的大量操作都需要 PowerShell 啦。 确实像上面有老哥说的,面向工资的话没什么需要学。 | 
|      76asm      2022-03-07 17:10:45 +08:00 现在好多恶意代码都开始用 powershell 写了,闹呢~~ |