近来不得不接触 pwsh,发现竟然设计的这么漂亮。

  • pwsh 的设计出发点:pwsh 的命令都是面向对象的,命令返回的是对象,命令传入的也是对象。对象在命令的管道间传递,从而组合出复杂任务。

    • 这和 linux 的基于文本动辄 awk, grep 的打法相比跨了一个时代
  • 列表式操作,所有的命令几乎都可以适用于单个对象和列表,也可以 filter map reduce
  • 输出除了文本,可以接 ConvertToJson, tocsv, to gridview, 贯彻了 MVC 理念。
    • 少了一个 C,因为把自己锁定为 shell 了,建议支持鼠标,支持类似 chrome devtool 的 $1 $2 选中对象别名。
  • pwsh 实际上是一个 .net 脚本语言,powershell 终端就是一个 REPL 工具
    • 美中不足的是作为编程语言这个语言确实有点丑陋,过于强调吸揽 cmd 老用户了,旧瓶装新酒,导致编写复杂程序舒展不开,写出来的代码比较怪。

最根本的问题,从设计上来说,powershell 应该把自己的 system manager 的一套融入 .net 框架,形成一套 .net 库 + annotation库,最好完全使用 .net 实现。

可能在 200x 年初,.net 的表达能力还不足以支持 powershell 的列表式运算,但现在看来,具备 linq 功能的 .net 在操作列表方面比 powershell 只强不弱。

现在 pwsh 形成了一套自己的库,而这些库难以被 .net 使用,导致编程语言锁定在 pwsh,而不能引入其它基于 .net 的脚本语言,如 python, js 甚至 vbs.net,形成一个共同的生态。当然,.net 这方面也很糟糕,IronPython, js 都停摆了,没有友军配合 powershell 就成为单打独斗的孤家寡人了。

powershell 不使用 iterator 也是一个设计失误,这导致 ping -t |where 这种可以方便的实现的 endless pipeline 没有机会实现。如果可以重来一次相信这些缺陷会避免。

评 PowerShell的更多相关文章

  1. 在PowerShell中使用curl(Invoke-WebRequest)

    前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...

  2. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  3. <译>通过PowerShell工具跨多台服务器执行SQL脚本

    有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...

  4. 利用PowerShell复制SQLServer账户的所有权限

    问题 对于DBA或者其他运维人员来说授权一个账户的相同权限给另一个账户是一个很普通的任务.但是随着服务器.数据库.应用.使用人员地增加就变得很枯燥乏味又耗时费力的工作.那么有什么容易的办法来实现这个任 ...

  5. PowerShell 数组以及XML操作

    PowerShell基础 PowerShell数组操作 将字符串拆分成数据的操作 cls #原始字符串 $str = "abc,def,ghi,mon" #数据定义 #$StrAr ...

  6. linux下mono,powershell安装教程

    1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...

  7. Windows下PowerShell监控Keepalived

    一.背景 某数据库服务器为CentOS,想要监控Keepalived的VIP是否有问题,通过邮件进行报警,但这台机器不能上外网,现在只能在Windows下通过PowerShell来完成发邮件预警. 二 ...

  8. 使用PowerShell收集多台服务器的性能计数器

    写在前面     当管理多台Windows Server服务器时(无论是DB.AD.WEB以及其他的应用服务器),当出现性能或其他问题后,参阅性能计数器都是一个非常好的维度从而推测出问题可能出现的原因 ...

  9. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  10. 使用PowerShell 监控运行时间和连接情况

    概念 Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境.你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆. powershell需要.N ...

随机推荐

  1. 【赵渝强】使用二进制包部署Kubernetes集群

    在一些企业的私有环境中可能无法连接外部的网络.如果要在这样的环境中部署Kubernetes集群,可以采集Kubernetes离线安装的方式进行部署.即:使用二进制安装包部署Kubernetes集群,采 ...

  2. 开源的键鼠共享工具「GitHub 热点速览」

    十一长假回来,我的手放在落灰的键盘上都有些陌生了,红轴竟敲出了青轴般的响声,仿佛在诉说对假期结束的不甘. 假期回归的首更,让我们看看又有什么好玩的开源项目冲上了开源热榜.一套键盘和鼠标控制多台电脑的工 ...

  3. Kubernetes的Pod调度:让你的应用像乘坐头等舱!

    一.Kubernetes 中 Pod 调度的重要性 在 Kubernetes 的世界里,Pod 调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的 Pod)送到最合适的停车位(节点).调度不仅关 ...

  4. duxui:基于Taro,兼容React Native、小程序、H5的多端UI库

    duxui是duxapp官方开发的一款兼容多端的UI组件库,兼容小程序.H5.React Native,库中提供了60+的组件,覆盖大部分使用场景 它能帮助你通过统一的组件样式,快速完成多端应用的开发 ...

  5. Uefi ABL读取XBL设置的标志位

    PBL(启动固化程序)-> XBL(扩展引导加载程序,负责初始化芯片驱动和核心应用功能.XBL通常会加载一些平台相关的驱动程序,并提供通用接口)-> ABL(应用引导加载程序,负责引导操作 ...

  6. Java日期时间API系列15-----Jdk8中java.time包中的新的日期时间API类,java日期计算2,年月日时分秒的加减等

    通过Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析 ,可以看出java8设计非常好,实现接口Temporal, Tempora ...

  7. threejs 浏览器窗口resize变化 自适应 html 全屏

    全屏:画布全屏和body页面全屏: // 导入 threejs import * as THREE from "three"; import { OrbitControls } f ...

  8. css实现直线拉伸

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 记录一次edu的小通杀

    记录一次edu的小通杀 fofa查询随便点的一个虚拟仿真实训系统,存在多处未授权.逻辑漏洞,并且存在文件上传漏洞导致getshell,检索下来差不多十几个学校在用 从虚拟仿真系统入手感觉容易一些,一个 ...

  10. KubeSphere 社区双周报 | KubeKey 新增网络插件 Hybridnet | 2023.08.18-08.31

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...