Geek学校:学习如何使用PowerShell中的对象

了解对象是“获取”PowerShell的基本概念之一。 加入我们,我们探索的对象,以及他们如何使PowerShell比任何其他外壳今天。

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

并保持关注系列的其余部分整个星期。

对象

你有没有想过什么设置PowerShell除了一个传统的Linux shell,如Bash,甚至遗留的命令提示符? 答案真的很简单:传统的shell输出文本,这使得很难做格式化和过滤。 当然,有工具可以帮助你完成工作(sed和grep的想法),但在一天的结束,如果你想做任何种类的重文本解析,你需要知道正则表达式回到你的手。

PowerShell利用底层的.Net框架,并采用不同的方法,使用对象而不是文本。 对象只是一些东西的表示。 它们是使用它们的部件和动作的集合。 让我们来看看自行车的部件和我们如何使用它们。

image

在.NET对象是多少,除了两个小的差异一样:“零件”被称为属性和“指令”被称为方法 如果我们想将一个Windows服务表示为一个对象,我们可能会决定使用三个属性来描述它:服务名称,状态和描述。 我们还需要与服务交互,所以我们可以给对象一个开始,停止和暂停方法。

image

您可以通过将对象的属性和方法传递给Get-Member cmdlet来查看对象的属性和方法。 PowerShell cmdlet输出的对象主要是.Net框架的底层类型,但如果您需要使用类似C#的语言或使用PSObject类型,则可以创建自己的对象。

管道

有很多带有管道的Linux shell,允许您将一个命令输出的文本作为输入发送到管道中的下一个命令。 PowerShell通过允许您获取一个cmdlet输出的对象并将其作为输入传递给管道中的下一个cmdlet,从而将此提升到更高级别。 诀窍是知道cmdlet返回什么类型的对象,这在使用Get-Member cmdlet时非常容易。

Get-Service | Get-Member

image

由于超出本文范围的原因,属性和方法共同称为类成员,这解释了为什么您使用Get-Member cmdlet获取对象具有的所有方法和属性的列表。 但是,Get-Member cmdlet还返回另一个重要的信息,即基础对象类型。 在上面的截图中,我们可以看到Get-Service返回类型的对象:

System.ServiceProcess.ServiceController

由于PowerShell处理对象而不是文本,并非所有cmdlet都可以使用管道[1]链接在一起。 这意味着我们需要找到一个cmdlet来寻找从流水线接受System.ServiceProcess.ServiceController对象。

Get-Command -ParameterType System.ServiceProcess.ServiceController

image

注意有一个名为Stop-Service的cmdlet; 让我们来看看它的帮助。

Get-Help - 名称停止服务

image

看起来像InputObject参数接受ServiceController对象的数组作为输入。 通常,如果您看到一个名为InputObject的参数,它将接受来自Pipeline的输入,但是确保让我们看看该参数的完整帮助。

Get-Help -Name Stop-Service -Full

image

我们的怀疑是正确的。 所以在这一点上我们知道以下:

  • Get-Service返回ServiceController对象
  • Stop-Service有一个称为InputObject的参数,它接受一个或多个ServiceController作为输入。
  • InputObject参数接受管道输入。

使用此信息,我们可以执行以下操作:

Get-Service - 名称“Apple移动设备”| 停止服务

image

这就是这一次的人。 下一次我们来看看如何格式化,过滤和比较流水线中的对象。

家庭作业


如果您有任何问题,你可以在Twitter我@taybgibb ,或者只是发表评论。

赞 (0)
分享到:更多 ()