现在 PowerShell 是不是没有什么用?

2022-03-05 13:53:33 +08:00
 fengsien1999

是不是掌握 Linux 的 Shell 就可以了?

12876 次点击
所在节点    PowerShell
77 条回复
yanmu6626
2022-03-06 08:48:33 +08:00
说实话,对于纯搞开发来说,真没觉得有啥好用的,用它我用 py 不行吗,还有人说 ps 比 py 好用,看见语法,我个人表示 py 真的比 ps 好理解一些
Xhack
2022-03-06 08:56:39 +08:00
@Tumblr 真的是 windows 占大半吗?
dbpe
2022-03-06 09:55:41 +08:00
windows 服务器真的有那么大占比么?
orannge
2022-03-06 10:13:14 +08:00
之前有过相关讨论 /t/748686
ejdjxidbsn
2022-03-06 10:53:03 +08:00
azure 人人都要写 powershell (悲)
zhangjinghua
2022-03-06 10:54:08 +08:00
我一个删除文件夹都没搞明白,powershell 和批处理是不是不一个玩意啊。。。。。。。
duke807
2022-03-06 11:24:59 +08:00
如果選擇了 windows ,沒用也要学,windows 下沒用的玩意還少嗎,vbs 、bat 、mfc 、win32 、visual basic 、asp … 還有當年學校教編程只教了沒用的 foxpro ,我是 07 界的應用電子技術的學生(應該教 c 才對,但是沒教,垃圾學校)

反觀 linux ,幾十年前學的 shell script ,到現在依然是主流,學的東西都基本不會過時
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 完全是两个东西.
aloxaf
2022-03-06 11:48:17 +08:00
@yayiji

> 编程语言表达应该极尽精简
你是认真的吗……
建议去 codegolf.stackexchange.com 上看看,上面有很多人会教你如何用「极尽精简」的语言来解决问题,比如用 J 语言求 0~1000 内 3 和 5 的倍数之和:+/(#~[:+./0=3 5|/])i.1000
w4087
2022-03-06 12:33:20 +08:00
powershell 为啥敢叫这个名字不是没道理的
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"
```
wjswxp
2022-03-06 13:15:00 +08:00
又想到一个例子 2333

```ps1
$files = Get-Item -Path "."
# foreach..in 和 ForEach-Object 的语法(和效率)是两回事,参见 "about_Foreach"
foreach ($file in $files) {
# 这里是和其他字符串替换略有不同的地方,pwsh 不提供单独的 ${file.Name} 写法
Write-Host "name=$($file.Name)"
}
```
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 ,所以我更倾向于上面那个数据。
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 一下 。
sunhelter
2022-03-06 13:52:24 +08:00
@fengsien1999 你也太局限了,实体行业基本很多都是 windows server ,运维门槛低。
jim9606
2022-03-06 14:28:37 +08:00
因为你不搞 Windows 运维。
相当多的 Windows 管理命令是只能用 Powershell 执行的,例如 MSIX 软件包(商店应用)管理的几个命令。觉得用不上是因为复杂的操作都跑去 GUI 了,Linux 一般没这个路线。
darklights
2022-03-06 14:38:18 +08:00
@wjswxp
ls 是命令,(ls) 是表达式
比较操作符、传参需要的是表达式
> 用作重定向,lt eq 之类作为比较操作符是 shell script 语法老传统了,不是 PS 独创

function 本质上是简写的 cmdlet ,当作为传统上的“函数”来用,确实是蛮蛋疼的,尤其是调用.Net 方法有返回值时,冷不丁就变成返回数组。踩过的坑之一。
ciaoly
2022-03-06 16:24:35 +08:00
PowerShell 真的很好用啊🥲
SenLief
2022-03-06 16:40:22 +08:00
windows 服务器运维还是在用的。
fengsien1999
2022-03-06 16:42:46 +08:00
@SenLief windows 服务器运维的岗位在国内是不是很少?

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

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

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

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

© 2021 V2EX