2017-07-25 8 views
1

Ich bin gerade dabei PowerShell zu lernen (v5 um genau zu sein) und ich glaube nicht, dass ich die Logik hinter den Objekteigenschaften und Parametern befolge.Powershell - Warum einige Eigenschaften verwandte Parameter haben

Wenn wir:

Get-Service | gm 

wir dort sehen, kann ein "Name" Aliasproperty ist:

Name      AliasProperty Name = ServiceName 

Aber wir haben auch (zum Verwechseln) ein Parameter namens "-Name" die erlaubt das Filtern auf einen bestimmten Namen.

Zum Beispiel:

kann ich den Namen Eigenschaft zugreifen, indem Sie:

(Get-Service).name 

und es vermutlich filtern sie durch Rohrleitungen.

Aber ich kann auch

Get-Service -Name "filter" 

Meine erste Frage tun wäre, ist das Eigentum an den Parameter verwendet? Wird der Parameter nur als eine Art hilfreiche Verknüpfung zum Filtern der "name" -Eigenschaft angegeben?

Zweitens möchte ich fragen, warum es für jede Eigenschaft keinen entsprechenden Parameter gibt. Zum Beispiel:

(Get-Service).servicetype 

keinen entsprechenden Parameter hat:

Get-Service -ServiceType 

Dank.

Antwort

0
  1. nicht wirklich. es ist nur eine sinnvolle Möglichkeit, einen Parameter zu benennen.
  2. warum möchten Sie das? Sie können mithilfe des Cmdlets select-object filtern.

Parameter werden meist mit einem logischen Ansatz benannt. so, wenn Sie für einen Prozess namens Notizblock suchen würden Sie

Get-Process -Name notepad 

tun, dass die Idee ist (einer) hinter Powershell, so seine intuitiv.
Select-Object Beispiel:

Get-Service | Select-Object Name, ServiceType 
2
  1. Nr Parameter sind Argumente von Cmdlets akzeptiert. Eigenschaften sind Dinge, die (durch einen Cmdlets Input/Output) zu einem Objekt gehören

  2. Sie Where-Object verwenden können, selektiver zu sein, basierend auf Eigenschaft Werte oder Select-Object basierend auf Eigenschaft Namen.


# 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 ist ein Cmdlets die Dienste auf einem Computer zurückzukehren. Es gibt ein Objekt vom Typ System.ServiceProcess.ServiceController zurück.

Diese Schreibweise:

(Get-Service).Name 

kehrt einfach die Eigenschaft Name, was auch immer Objekt durch den Befehl in Ihrem Pars zurückgeführt wird, und wirklich nichts mit dem in sich selbst Get-Service-Befehl zu tun hat. Jeder Befehl, der zu einem oder mehreren Objekten mit einem Parameter Name führt, gibt Ihnen die Ausgabe. Dies könnte sogar verschiedene Objekttypen wie folgt sein:

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

winlogon 
wuauserv 

A Cmdlets, um mit einem bestimmten Objekttyp arbeiten, werden oft mit dem Parameternamen teilen Objekte Eigenschaften. Nicht alle Eigenschaften des Objekts haben jedoch entsprechende Parameter, nur die am häufigsten verwendeten.

Ist der Parameter nur als eine Art hilfreiche Verknüpfung zum Filtern der Eigenschaft "name" angegeben?

Mehr wie andersherum. Die Filterung mit dem Parameter name ist der "bona fide" Weg, um die gewünschten Dienste zu erhalten.

Die Cmdlets sind da, so dass Sie nicht direkt mit den Eigenschaften von .NET-Objekten herumärgern müssen.

Verwandte Themen