极客学校:了解如何扩展PowerShell

PowerShell为您提供了两种扩展shell的方法。您可以使用管理单元,它只是二进制的,并且是用成熟的编程语言(如C#)开发的;也可以使用模块,它可以是基于脚本的,也可以是二进制的。

请务必阅读本系列的前几篇文章:

了解如何使用PowerShell自动化Windows。 学习在PowerShell中使用Cmdlet。 了解如何在PowerShell中使用对象。 在PowerShell中学习格式化、筛选和比较。 学习在PowerShell中使用远程处理。 使用PowerShell获取计算机信息。 在PowerShell中使用集合

在接下来的一周里,我们将继续关注这一系列的节目。

Snapins

Snapins去年也是如此。撇开玩笑不谈,管理单元从未真正在PowerShell社区流行起来,因为大多数脚本编写人员都不是开发人员,您只能用C#这样的语言编写管理单元。尽管如此,仍然有一些产品使用管理单元,例如Web Deploy。要查看shell中有哪些管理单元可供您使用,请使用以下命令:

要使用管理单元添加的命令,您首先需要将其导入到会话中,您可以这样做:

此时,如果未安装Web Deploy管理单元,则会出现错误。如果您确实像我一样安装了它,那么它将被导入到您的会话中。要获取管理单元中可用命令的列表,只需使用Get-Command cmdlet即可:

注意:从技术上讲,这不是一个模块,但是由于某些原因,您仍然必须使用Module参数。

模块

模块较新,是未来的发展方向。它们既可以使用PowerShell编写脚本,也可以用C#等语言编码。大多数内置命令也被组织到模块中。要查看系统上的模块列表,可以使用以下命令:

随着产品的更新,它们的PowerShell对应产品也将迁移到模块中。例如,SQL过去有一个管理单元,但现在由模块组成。

要使用模块,您需要先将其导入。

您可以使用与管理单元相同的技巧来查看模块添加到shell中的所有命令。

因此,剩下的问题是:PowerShell如何知道您的系统上有哪些管理单元和模块?嗯,管理单元有点麻烦,必须安装。安装过程的一部分包括创建几个注册表项,PowerShell查看这些注册表项以查找管理单元信息。另一方面,只需将模块放在PSModulePath环境变量中的一个位置,就可以将它们注册到shell。或者,您可以只将模块的路径添加到环境变量中。

这将显示出变量的内容。请注意,如果您安装了类似SQL的模块,它将如何修改变量以包括SQL模块的位置。

模块自动加载

Powershell3引入了一个很棒的新功能,有几个名字。它们都不是官方的,但“模块自动加载”是对它的最好描述。基本上,它允许您使用属于外部模块的cmdlet,而无需使用Import-Module cmdlet显式导入模块。要查看这一点,请首先使用以下命令从shell中删除所有模块:

然后,您可以使用以下命令检查是否没有加载模块:

现在使用不在核心库中的cmdlet。测试连接是一个很好的连接:

如果您再次检查加载的模块,您将看到它确实加载了模块。

今天的节目到此为止,各位,明天请加入我们的行列,了解更多内容。

相关文章