极客学校:学习在PowerShell中使用Cmdlet

如果您已经通过命令提示符使用了ipconfig或ping,那么您就已经成为PowerShell忍者的一半了。所以,快来加入我们的行列吧,我们将在这部极客学校的安装中发现cmdlet。

请务必阅读我们介绍PowerShell的第一篇文章,并在接下来的一周里继续关注我们的系列文章。

一个Cmdlet的解剖

在本系列的第一部分中,我们看到了一个类似以下内容的cmdlet:

PowerShell cmdlet具有动词-名词语法,如上所示。需要注意的重要一点是,即使cmdlet可能返回多个结果,名词也始终是单数。若要查看PowerShell中的合法谓词列表,可以使用Get-Verb cmdlet。

了解法律动词并记住单数名词规则确实有助于猜测cmdlet名称。例如,假设您想要获取服务及其状态的列表-没错,这就像Get-Service一样简单。您认为我们将如何获得正在运行的进程的列表-没错,get-process就可以做到这一点。

这使得使用任何技术都变得非常容易。例如,如果您加载了Exchange cmdlet,我们可以使用以下命令轻松获取服务器上的邮箱列表:

然而,有一个例外。撇开Exchange不谈,所有其他特定于技术的命令都需要前缀。例如,如果我们想要获取当前通过远程桌面登录的用户,我们将键入:

这可以在下面的屏幕截图中看到。

注意:此屏幕截图是在Server 2012机顶盒上拍摄的,因为您可以在那里找到大多数特定于技术的模块。

不久前,我读到PowerShell教父Don Jones的一篇文章,他在文章中解释说,Exchange在此前缀被添加到cmdlet之前发货,因此它从未实现过它们,将来也永远不会实现它们。

别名

PowerShell附带的另一个功能是能够以多种方式运行相同的命令别名(如果您愿意的话)。令人敬畏的是,它们包含了许多您可能在命令提示符中使用的命令,以及一些Linux别名。例如,在PowerShell中,我们可以使用以下命令获取目录列表:

习惯于使用命令提示符吗?别担心,他们会掩护你的。

有Linux背景吗?他们也在那里掩护你。

如果您已经编写脚本几年了,您往往会变得懒惰,并且开始大量使用别名,但这对将要阅读我们代码的新手没有任何帮助。要查看别名在幕后运行的命令,可以使用以下命令:

另一方面,如果您觉得是时候升级游戏了,可以使用Definition参数获取cmdlet的所有别名:

如果您来自其他背景,您可以通过执行以下操作来添加您自己的别名:

显然,您需要将“icanhazfilez”替换为新别名的名称,并将Get-ChildItem替换为您希望它在引擎盖下运行的cmdlet。

需要注意的一件事是,关闭shell时会丢失您定义的所有别名。您可以通过将它们的定义添加到您的配置文件脚本来解决此问题。

截断参数

Windows PowerShell还允许您截断参数名称,直到它们变得不明确为止,也就是说,直到PowerShell无法再找出您正在谈论的参数为止。例如:

等同于:

如果您碰巧将参数名称设置得太不明确,您会得到一个错误。

旧版命令

最后,您熟悉和喜爱的命令仍然可以在PowerShell中使用。

只需记住,像ping这样的遗留应用程序会输出一个字符串,而且使用PowerShell cmdlet通常有更好的方法来做同样的事情。

我们现在没有输出一长串文本,而是只剩下一个对象,我们将在明天的“极客学校”中来看看。

相关文章