极客学校:了解如何使用PowerShell自动化Windows

在本期的“极客学校”中,我们将帮助您理解Windows中内置的强大的PowerShell脚本语言,该语言在IT环境中非常有用。

虽然本系列不是围绕考试构建的,但学习PowerShell是您作为网络管理员可以做的最重要的事情之一,因此,如果您想要学习一件事来帮助您的IT职业生涯,那就是这件事。另外,这很有趣。

采用 / 介绍 / 引进

PowerShell是微软提供的最强大的自动化工具,它既是shell又是脚本语言。

请注意,本系列基于Windows 8和Server 2012附带的PowerShell 3。如果您运行的是Windows 7,请先下载PowerShell 3更新,然后再继续。

与控制台和ISE会面

与PowerShell进行开箱即用的交互有两种方式,即控制台和集成脚本环境(也称为ISE)。与PowerShell 2附带的可怕版本相比,ISE有了很大改进,可以通过按Win+R键盘组合调出运行框,然后键入powershell_ise并按Enter键来打开ISE。

如您所见,ISE采用拆分视图,因此您可以快速编写脚本,同时仍能在ISE的下半部分看到结果。ISE的下半部分(打印脚本结果的位置)也可以用作REPL提示符-与命令提示符非常相似。v3 ISE最终在脚本窗格和交互式控制台中添加了对IntelliSense的支持。

或者,您可以使用PowerShell控制台与PowerShell交互,我将在本系列的大部分内容中使用它。PowerShell控制台的行为与命令提示符非常相似-您只需输入命令,它就会显示结果。要打开Windows PowerShell控制台,请再次按Win+R组合键打开运行框,然后键入powershell,然后按Enter键。

像这样的REPL提示符对于即时满足来说是非常棒的:您输入一个命令,您就会得到结果。虽然控制台不提供智能感知功能,但它提供了一种称为制表符完成的功能-只需开始键入命令,然后按Tab键即可在可能的匹配之间循环。

使用帮助系统

在以前版本的PowerShell中,安装Windows时会包含帮助文件。这在很大程度上是一个很好的解决方案,但给我们留下了一个严重的问题。当PowerShell帮助团队不得不停止处理帮助文件时,PowerShell开发人员仍在忙于编码和进行更改。这意味着在PowerShell发布时,帮助文件是不正确的,因为它们不包含对代码所做的较新更改。为了解决这个问题,PowerShell3没有现成的帮助文件,而是包含了一个可更新的帮助系统。这意味着在您执行任何操作之前,您需要下载最新的帮助文件。您可以通过打开PowerShell控制台并运行以下命令来执行此操作:

祝贺您第一次运行PowerShell命令!事实是,Update-help命令有很多选项,而不仅仅是运行它,要查看这些选项,我们需要查看该命令的帮助。要查看命令的帮助,只需将需要帮助的命令的名称传递给get-help命令的name参数,例如:

你可能想知道如何解释所有的文本,我的意思是,为什么语法部分下面有两个大量的信息,为什么到处都有这么多的括号?首先要做的是:语法部分下面有两个信息块的原因是它们表示运行命令的不同方式。从技术上讲,这些参数集称为参数集,一次只能使用一个(不能混合来自不同集的参数)。在上面的屏幕截图中,您可以看到顶部参数集有SourcePath参数,而底部参数集没有。原因是,如果您要从网络上已下载帮助文件的另一台计算机更新帮助文件,则会使用top参数集(包含SourcePath的参数),而如果您只想从Microsoft获取最新的文件,则不需要指定源路径。(=

要回答第二个问题,帮助文件遵循一定的语法,如下所示:

参数名称及其类型周围的方括号表示它是可选参数,没有它命令也能正常工作。 参数名称周围的方括号表示参数是位置参数。 尖括号中参数右侧的内容告诉您该参数需要的数据类型。

虽然您应该学习阅读帮助文件语法,但如果您不确定某个特定参数,只需将-full附加到Get Help命令的末尾,然后向下滚动到Parameters部分,它将告诉您有关每个参数的更多信息。

关于帮助系统,您需要知道的最后一件事是如何使用它来发现命令,这实际上非常简单。您知道,PowerShell几乎在任何地方都接受通配符,因此将它们与get-help命令一起使用可以方便地发现命令。例如,我正在查找处理Windows服务的命令:

当然,所有这些信息可能对BAT来说并不方便,但是相信我,花点时间学习如何使用帮助系统。它总是派上用场,即使对于多年从事此工作的高级脚本编写者也是如此。

安全 / 抵押品 / 保证 / 证券

如果不提到安全问题,这不是一个恰当的介绍。PowerShell团队最担心的是PowerShell会成为脚本小子们最新也是最大的攻击点。他们已经采取了一些安全措施,以确保这种情况不会发生,所以让我们来看看他们。

最基本的保护形式来自于PS1文件扩展名(用于表示PowerShell脚本的扩展名)没有在PowerShell主机上注册,而实际上是在记事本上注册的。这意味着如果你双击一个文件,它将用记事本打开,而不是运行。

其次,您不能仅通过键入脚本名称来从shell运行脚本,您必须指定脚本的完整路径。因此,如果要在C盘上运行脚本,则必须键入:

或者,如果您已经位于C盘的根目录,则可以使用以下命令:

最后,PowerShell有一种称为执行策略的功能,它可以阻止您只运行任何旧脚本。事实上,默认情况下,您不能运行任何脚本,如果您想要被允许运行它们,则需要更改您的执行策略。有4个值得注意的执行策略:

受限:这是PowerShell中的默认配置。此设置意味着无论其签名如何,任何脚本都不能运行。使用此设置可以在PowerShell中运行的唯一内容是单个命令。 AllSigned:此设置允许脚本在PowerShell中运行。该脚本必须具有来自受信任发布者的关联数字签名。在您运行来自受信任发布者的脚本之前,将会出现提示。 RemoteSigned:此设置允许运行脚本,但要求从Internet下载的脚本和配置文件具有来自受信任发布者的关联数字签名。从本地计算机运行的脚本不需要签名。在运行脚本之前没有任何提示。 无限制:允许运行未签名的脚本,包括从Internet下载的所有脚本和配置文件。这将包括来自Outlook和Messenger的文件。这里的风险是在没有任何签名或安全性的情况下运行脚本。我们再次向您保证,您永远不会在这个环境中使用我们。

要查看您当前的执行策略设置为什么,请打开PowerShell控制台并键入以下内容:

对于本课程和大多数其他情况,RemoteSigned策略是最好的,因此请继续使用以下内容更改您的策略。

注:需要从提升的PowerShell控制台执行此操作。

各位,这次到此为止,明天见,还有更多的PowerShell乐趣。

免责声明:PowerShell命令的正确术语是cmdlet,从现在开始我们将使用这个正确的术语。在这个介绍中,将它们称为命令会更合适。

如果你有任何问题,可以发tweet给我@taabgibb,或者直接留言。

相关文章