也许大家都看到了微软将 PowerShell 基于 MIT license 进行了开源这一重磅消息,微软果然已经不再是之前印象中的微软了。很多用户都在 Linux 社区中讨论微软的这一举动,想必对大多数开源支持者来说,PowerShell on Linux 来得太突然了。但 PowerShell 的缔造者和微软技术研究员 Jeffrey Snover 却从来不掩饰自己有心将 PowerShell 开源的期望,但大家也不难想像,对于像微软这样的公司,将产品开源确实是艰难的一步。
但如今,一切都改变了!
之所以 PowerShell 会开源,可能是因为微软在 .NET Framework 核心版本的开发上已经投入了大量资源,而且 .NET Core Framework 也是开源的。由于开源版本的 PowerShell 基于 .NET Core,这也就意味着对 .NET 的依赖可能会让开源版 PowerShell 有一定的限制或局限性。
如果你想了解更多,可以访问 DotNetFoundation.org 站点。
那开源之后,用户能够得到哪些好处呢?目前微软已经宣布,现在用户已可以在如下平台上运行 PowerShell 开源版本:
- Windows 8.1
- Windows 10
- Windows Server 2012 R2
- Windows Server 2016
- Ubuntu 14.04
- Ubuntu 16.04
- CentOS 7
- OS X 10.11
没错,这意味着我们现在已经可以在 Mac 和 Linux 平台中运行 PowerShell!就我个人而言,感觉微软正布局让 PowerShell 来管理一切,这也是微软向非自家平台目标迈出的重要一步。
PowerShell on Linux抢先看
下面我们一起来看一下我在 Ubuntu 16.04 的终端中测试 PowerShell 的一些截图。
你也可以使用 $PSVersionTable 变量来查看当前版本:
PowerShell on Linux 目前还处在 alpha 阶段,使用上也与 Windows 中的使用体验有所不同,我们先来看下已经支持哪些 module 和命令。
当然也有一些命令在 Linux 版本中是不支持的,例如 Get-Service 和 Get-Eventlog 都被移除了,但其它用法与 Windows 中还是比较类似的,例如「帮助」。
在 Linux 中使用 PowerShell 命令时也同样可以使用 object(对象),这意味着可以使用与 Windows 中相同的管道符号。
还有一个比较有意思的是,在 Linux PowerShell 会话中同时支持使用 Linux 的原生命令以及等价的 PowerShell 命令:
PowerShell on Linux限制
目前系统极客仅对 Linux 版本进行了测试,并没有测试 Mac 系统中的功能实现,但就目前的测试结果来看,开源版 PowerShell 还是有些限制的。
最明显的一个限制就是 PowerShell on Linux 目前还没有对远程计算机的管理能力,不过微软已经在计划通过更新来解决这个问题,而且最有可能的实现方式就是支持 OpenSSL 作为其远程管理协议。另外就是目前还不支持后台任务和计划任务,当然也不可能支持 WMI 或 CIM。
当然,以上这些所谓的限制都是由 Linux 和 Windows 系统之间的区别和差异造成的,最终可能会有其它开源的解决方案来实现和解决。