Powershell - 为什么某些属性具有相关参数

时间:2017-07-25 10:48:04

标签: powershell cmdlet

我正在学习PowerShell(确切地说是v5),我似乎没有遵循对象属性和参数背后的逻辑。

如果我们采取:

Get-Service | gm

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

Name                      AliasProperty Name = ServiceName

但我们也(令人困惑地)有一个名为“-Name”的参数,它允许对给定名称进行过滤。

例如:

我可以通过执行以下操作来访问name属性:

(Get-Service).name

并且可能通过管道来过滤它。

但我也可以

Get-Service -Name "filter"

我的第一个问题是,与参数相关的属性是?该参数是否仅作为过滤“name”属性的一种相关的有用快捷方式?

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

(Get-Service).servicetype

没有相应的参数:

Get-Service -ServiceType

感谢。

3 个答案:

答案 0 :(得分:2)

  1. 没有。参数是Cmdlets接受的参数。属性是属于对象的东西(由Cmdlet输入/输出)

  2. 您可以根据属性 使用Where-Object更具选择性,或者根据属性 <使用Select-Object强>名称

  3. # 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
    

答案 1 :(得分:0)

  1. 不是真的。它只是一种命名参数的有意义的方法。
  2. 你为什么要这样?您可以使用select-object cmdlet进行过滤。
  3. 参数主要使用逻辑方法命名。因此,如果您正在寻找一个名为记事本的流程,您可以

    Get-Process -Name notepad
    

    这是Powershell背后的想法(其中一个),所以它很直观 选择对象示例:

    Get-Service | Select-Object Name, ServiceType
    

答案 2 :(得分:0)

Get-Service是一个用于在计算机上返回服务的cmdlet。它返回System.ServiceProcess.ServiceController类型的对象。

这种表示法:

(Get-Service).Name

只返回您的parens中命令返回的任何对象的Name属性,并且实际上与Get-Service命令本身无关。任何导致一个或多个具有Name参数的对象的命令都会为您提供输出。这甚至可以是这样的不同对象类型:

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

winlogon
wuauserv

用于处理特定类型对象的cmdlet通常会与该对象属性共享参数名称。并非对象的所有属性都具有相应的参数,只有最常用的参数。

  

参数是否仅作为过滤“name”属性的一种相关有用的快捷方式?

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

cmdlet在那里,所以你不必直接使用.NET对象的属性。