2017-07-25 50 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對象的屬性。

相關問題