2017-05-22 5 views
0

Derzeit wie, dass ich so mache:Wie kann man einfach PSObject aus Funktionsargumenten erzeugen, um das Ergebnis in die Pipeline zurückzugeben?

function Invoke-Service 
{ 
    Param(
     [parameter(Mandatory=$true, 
      ValueFromPipeline=$true, 
      ValueFromPipelineByPropertyName=$true)] 
     [int] $Id, 
     [parameter(Mandatory=$true, 
      ValueFromPipeline=$true, 
      ValueFromPipelineByPropertyName=$true)] 
     [string] $Name, 
     [parameter(Mandatory=$true, 
      ValueFromPipeline=$true, 
      ValueFromPipelineByPropertyName=$true)] 
     [int] $Age 
    ) 
    DoSomeWork | 
     New-Object PSObject -Property @{ Id = $Id; Name = $Name; Age = $Age } 
} 

Diese Funktion erhalten kann Parameter direkt oder von Import-Csv Ausgang ist oder select ausgegeben.

Aber sehr oft möchte ich mit der ganzen Kraft PSObject die Pipeline-Verarbeitung nach unten fortsetzen:

Import-Csv -Path "data.csv" | 
    Invoke-Service | 
     ... # 

Und meine Frage ist: muss ich New-Object rufen alle Parameter Aufzählen oder gibt es ein Schlüsselwort oder andere Technik die ich vermisst habe?

Antwort

2

über die $PSBoundParameters Variable:

New-Object psobject -Property $PSBoundParameters 

$PSBoundParameters ist eine automatische Variable, die eine Hash-Tabelle mit einem Eintrag pro benannten Parameter enthalten, unter Verwendung des vollständigen Parameternamen als Schlüssel und den Parameter Argument als Wert, so in Ihr Beispiel, es ist bereits zu 100% auf die Eingabe ausgerichtet, die Sie versuchen zu übergeben

+0

Funktioniert nicht nur mit Parametern aus der Pipeline (wenn jemand zweifelt). Groß! – astef

Verwandte Themen