powershell awk_Powershell入门指南·一

v2-40cdafa4fba933820c3144c7715cefbd_1440w.jpg?source=172ae18b

Powershell入门指南(一)·PowerShell及CLI发展


不知各位有没有注意,从Windows 10开始,在开始按钮上右键,菜单里面的CMD不见了,取而代之的是一个叫PowerShell的东西。

也许你也曾经打开过它,但是不知道它有什么用; 或者你了解一些CMD命令,但是你发现在这个PowerShell里面有些命令好像不能执行了。 而且这个PowerShell相比CMD启动也不算快,微软为什么要拿这个替换CMD呢? 这要从早期的Windows的命令行背景说起:

背景

用于个人计算机的每个Windows版本都包含一个用于管理操作系统的命令行解释程序(CLI);Windows系统的前身,即MS-DOS,完全依赖CLI支持。在MS-DOS和Windows9x系列系统里面提供CLI功能的程序是COMMAND.COM,在Windows NT以及之后的各种系统是CMD.exe提供CLI支持的。这两者都支持一些内部命令。 它们还包括基本的脚本语言(batch file)支持,这些脚本可以完成多种自动化工作,但是对于用户交互界面(GUI)的自动化工作,它们就完全无能为力了。这是因为对GUI的操作对应到脚本上的等价操作是受限的,毕竟这是最基本的脚本环境,支持的功能还不全。到了Windows Sever 2003发布的时候,这一情况有所改善,但是仍令人不满意。

其实Microsoft在1998年就试图通过对Windows 98引入Windows脚本宿主(WSH)来解决其中一些缺点,这个程序在系统中名叫cscript.exe,它集成了Active script[^1]脚本引擎,可以使用兼容的VBscriptJScript来编写,调用其他应用程序的API或者COM。然而,它有其自身的不足之处: 它的文档不是很容易获得,并且在几个著名的病毒利用其安全协议中的bug之后,它迅速变成了脆弱系统漏洞...还有一点就是不同版本的Windows提供了各种专用命令行解释器(例如netsh和WMIC),这些解释器只能使用自己的命令,它们是不能互相兼容的。


开发人员的设想

在9月13日发表的一次采访中,Jeffrey Snover(PowerShell之父,担任过Windows server2012的首席架构师,现在是office 365 Intelligent Substrate Platform的架构师)解释了开发该项目的动机:

“我一直推动管理的变更,然后我开始把一些UNIX工具适配到Windows平台,结果它们却不能工作,对吧?因为Windows 和Linux的核心架构有很大区别。在Linux上,一切管理的配置都是文本文件,因此所有管理软件其实就是处理文本文件的程序。想想看,使用AWK(文本处理工具)、grep(文本搜索工具)、sed(类似于AWK)管理你的系统是多么美好的事请! 我把这些工具移植到Windows,结果它们对于系统的管理没有任何作用,因为Windows其实是基于API的操作系统,所有的API返回的都是结构化的数据,因此那些UNIX软件没什么帮助。 …… 我突然有了就是现在powershell这样子的想法,告诉别人说:‘嘿!没准我们可以把这个做得更好!’”
v2-1317840e4ae26b3cb93c707c23ffd6a5.jpeg
J.Snover先生谈为何开发Poshhttps://www.zhihu.com/video/1220127697910837248

开发历程

  • 2002年,微软开始开发一种新的命令行管理方法,名为Monad(也称为Microsoft Shell或MSH)的CLI。其背后的想法于2002年8月发表在一份名为Monad Manifesto的白皮书中。Monad将成为一个新的可扩展CLI,其设计新颖,能够自动执行各种核心管理任务。
  • 微软于2003年10月在洛杉矶举行的专业发展大会上首次展示Monad。几个月后开始私人测试计划,最终推出公共测试计划。
  • Microsoft 于2005年6月17日发布了第一个Monad公共测试版,
  • 2005年9月11日发布了Beta 2
  • 2006年1月10日发布了Beta 3。
  • 不久之后,2006年4月25日,Microsoft正式宣布Monad已重命名为Windows PowerShell,将其定位为其管理技术产品的重要组成部分。 名称更改和RC的一个重要方面是,它现在是Windows的一个组件,而不是附加产品。
  • PowerShell版本1的候选版本2于2006年9月26日发布,最终发布于2006年11月14日,并在TechEd Barcelona上发布。
  • 早期版本的Windows PowerShell于2007年1月30日发布。
  • PowerShell v2.0开发在PowerShell v1.0发布之前就开始了。在开发过程中,Microsoft发布了三个社区技术预览(CTP)。Microsoft向公众提供了这些版本。
  • Windows PowerShell v2.0的最后一个CTP版本于2008年12月推出。
  • PowerShell v2.0已于2009年8月完成并发布,作为Windows 7和Windows Server 2008 R2的组成部分。适用于Windows XP,Windows Server 2003,Windows Vista和Windows Server 2008的PowerShell版本于2009年10月发布,可供32位和64位平台下载。
  • Windows 10提供了PowerShell的测试框架
  • 2016年8月18日,微软宣布他们开发了PowerShell开源和跨平台,支持Windows,macOS,CentOS和Ubuntu。源代码发布在GitHub上。转向开源创建了PowerShell的第二个版本,称为“PowerShell Core”,它运行在 .NET Core上。它与“Windows PowerShell”不同,后者在完整的 .NET Framework上运行。
  • 从版本5.1开始,PowerShell Core与Windows Server 2016 Nano Server捆绑在一起

简介

PowerShell是Microsoft的任务自动化和配置管理框架,由命令行shell和相关的脚本语言组成。最初只是一个Windows组件,称为Windows PowerShell,它于2016年8月18日通过PowerShell Core的推出而成为开源和跨平台。前者构建于 .NET Framework上,后者构建于 .NET Core上。

在PowerShell中,管理任务通常由cmdlet(发音为command-lets)执行,cmdlet是实现特定操作的专用 .NET 类。这些工作通过访问不同数据存储中的数据(如文件系统或注册表),这些数据存储通过提供程序提供给PowerShell 。第三方开发人员可以向PowerShell添加cmdlet和提供程序。自定义的脚本可以使用Cmdlet ,还可以打包成模块作为新的Cmdlet使用。

PowerShell提供对COM和WMI的完全访问,使管理员能够在本地和远程Windows系统以及WS-Management和CIM上执行管理任务,从而实现远程对Linux系统和网络设备的管理。PowerShell还提供了一个托管API,PowerShell运行时可以使用该API嵌入到其他应用程序中。然后,这些应用程序可以使用PowerShell功能来实现某些操作,包括通过图形界面公开的操作。Microsoft Exchange Server 2007 使用此功能将其管理功能公开为PowerShell指令和提供程序并实现作为PowerShell主机的图形管理工具,可通过调用必要的cmdlet来使用Exchange Sever 2007。其他Microsoft应用程序(包括Microsoft SQL Server 2008)也通过PowerShell cmdlet公开其管理界面。

PowerShell含有广泛的,基于控制台的自身帮助(类似于手册页在Unix外壳)通过键入Get-Help命令即可轻松获取使用方法。你可以通过Update-Help cmdlet 从Internet升级本地帮助内容,还能通过Get-Help <命令名> -online获取来自网络的帮助。


以上内容来自PowerShell - Wikipedia,背景和开发人员设想部分为笔者翻译(翻译如有问题欢迎指出),开发历程和简介由Google提供翻译服务,笔者进行了校对。

版本

了解更多请参考: PowerShell - Wikipedia
最初使用代号“Monad”,PowerShell于2003年9月首次在专业开发者大会上公开展示。所有主要版本仍然受支持,并且每个主要版本都具有与先前版本的向后兼容性。

PowerShell 1.0

PowerShell 1.0于2006年11月发布,适用于Windows XP SP2,Windows Server 2003 SP1和Windows Vista。它还是Windows Server 2008的可选组件。

PowerShell 2.0

PowerShell 2.0与Windows 7和Windows Server 2008 R2集成,适用于Windows XP Service Pack 3,Windows Server 2003 Service Pack 2和Windows Vista Service Pack 1.

PowerShell v2除了包含240多个新cmdlet之外,还包括对脚本语言和托管API的更改。

PowerShell 3.0

PowerShell 3.0与Windows 8和Windows Server 2012集成在一起。Microsoft还为Windows 7 Service Pack 1,Windows Server 2008 Service Pack 1和Windows Server 2008 R2 Service Pack 1 提供了PowerShell 3.0 。

PowerShell 3.0是更大的软件包Windows Management Framework 3.0(WMF3)的一部分,它还包含支持远程处理的WinRM服务。Windows Management Framework 3.0的早期社区技术预览2(CTP 2)版本于2011年12月2日发布。 Windows Management Framework 3.0于2012年12月发布,并默认包含在Windows 8和Windows Server 2012中。

PowerShell 4.0

PowerShell 4.0与Windows 8.1和Windows Server 2012 R2集成在一起。Microsoft还为Windows 7 SP1,Windows Server 2008 R2 SP1和Windows Server 2012提供了PowerShell 4.0。

PowerShell 5.0

包含PowerShell 5.0的Windows Management Framework(WMF)5.0 RTM于2016年2月24日在发布严重错误的初始版本后重新发布到Web。主要功能包括OneGet PowerShell cmdlet,支持Chocolatey基于存储库的包管理,并将对交换机管理的支持扩展到第2层网络交换机。

PowerShell 5.1

它与2016年8月2日的Windows 10 周年更新以及Windows Server 2016一起发布。PackageManagement现在支持代理,PSReadLine现在支持ViMode,并添加了两个新的cmdlet:Get-TimeZone和Set-TimeZone。LocalAccounts模块允许添加/删除本地用户帐户。 PowerShell 5.1的预览版已于2016年7月16日针对Windows 7,Windows Server 2008,Windows Server 2008 R2,Windows Server 2012和Windows Server 2012 R2 发布,并于2017年1月19日发布正式版。

PowerShell 5.1是第一个有两个版本的PowerShell,包括“桌面”和“核心”版本。“桌面”版本是在完整的 .NET Framework堆栈上运行的传统Windows PowerShell的延续。“Core”版本在 .NET Core上运行,并与Windows Server 2016 Nano Server捆绑在一起。为了减少占用空间,后者缺少一些功能,例如用于管理剪贴板的cmdlet或将计算机加入域,WMI版本1 cmdlet,事件日志cmdlet和配置文件。这是专为Windows制作的PowerShell的最终版本。

PowerShell 6.0

PowerShell Core 6.0于2016年8月18日首次发布,当时微软公布了PowerShell Core并决定使该产品跨平台,独立于Windows,而且是免费和开源的。 它于2018年1月10日实现了Windows,macOS和Linux的普遍可用性。它有自己的支持生命周期,并遵循Windows 10引入的Microsoft生命周期策略:仅支持最新版本的PowerShell Core。微软希望每六个月为PowerShell Core 6.0发布一个次要版本。

此版本PowerShell中最重要的变化是扩展到其他平台。对于Windows管理员,此版本的PowerShell没有任何主要的新功能。在2018年1月11日的社区访谈中,PowerShell团队被要求列出将从Windows PowerShell 5.1迁移到PowerShell Core 6.0的Windows IT专业人员可能发生的十大最令人兴奋的事情。作为回应,微软的Angel Calvo只能说出两个:跨平台和开源(这两个就足够了)。

目前Windows 10 上自带的最新版本是5.1

[^1]:一种可以采用各种语言以及固定格式等实现、并能与其他 ActiveX 控件(可以理解为一种互联网插件)交互的脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值