2017-07-25 49 views
1

我正在学习PowerShell(准确的说是v5),我似乎没有遵循对象属性和参数背后的逻辑。Powershell - 为什么有些属性有相关参数

如果我们:

Get-Service | gm 

我们可以看到有一个 “名称” AliasProperty:

Name      AliasProperty Name = ServiceName 

但我们也(容易混淆的)都称为参数 “杂牌”,允许过滤在一个给定的名字。

例如:

我可以通过做访问name属性:

(Get-Service).name 

,并通过管道它大概过滤。

但我也可以做

Get-Service -Name "filter" 

我的第一个问题是,是对有关参数的财产?该参数只是作为一种与“名称”属性过滤相关的有用快捷方式给出的?

其次,我想问为什么没有为每个属性相应的参数。例如:

(Get-Service).servicetype 

不具有相应的参数:

Get-Service -ServiceType 

感谢。

回答

0
  1. 不是真的。它只是一个有意义的方式来命名参数。
  2. 你为什么要这样?您可以使用select-object cmdlet进行过滤。

参数大多使用逻辑方法命名。所以如果你正在寻找一个过程被称为记事本,你会做

Get-Process -Name notepad 

这背后PowerShell中的想法(之一),所以它的直观。
选择-对象例如:

Get-Service | Select-Object Name, ServiceType 
2
  1. 号参数通过的cmdlet接受的论点。属性是(由小命令输入/输出)属于对象

  2. 您可以使用Where-Object基于基于财产财产,或Select-Object要更有选择性的事情。


# Filter based on ServiceType 
Get-Service | Where-Object ServiceType -eq Win32ShareProcess 

# Filter based on ServiceType... but return only the name 
Get-Service | Where-Object ServiceType -eq Win32ShareProcess | Select-Object Name 
0

GET-Service是cmdlet来在计算机上返回的服务。它返回类型System.ServiceProcess.ServiceController的对象。

这个符号:

(Get-Service).Name 

只返回被命令在括号内返回任何对象的名称属性,真的没有任何关系,在自身获得-Service命令。任何使用Name参数生成一个或多个对象的命令都会为您提供输出。这甚至可能是不同的对象类型是这样的:

((get-process -name "winlogon"), (Get-Service -name "wuauserv")).Name 

winlogon 
wuauserv 

一种与特定类型的对象的工作往往会与共享参数名称命令对象的属性。不是来自对象的所有属性都将具有相应的参数,只有最常用的参数。

该参数只是作为一种与“名称”属性过滤相关的有用快捷方式给出的?

更像是另一种方式。使用name参数进行过滤是获得所需服务的“真正”方式。

cmdlet存在,因此您不必直接使用.NET对象的属性。

相关问题