我正在学习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
感谢。
答案 0 :(得分:2)
没有。参数是Cmdlets接受的参数。属性是属于对象的东西(由Cmdlet输入/输出)
您可以根据属性 值 使用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
答案 1 :(得分:0)
select-object
cmdlet进行过滤。参数主要使用逻辑方法命名。因此,如果您正在寻找一个名为记事本的流程,您可以
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对象的属性。