Ich habe eine erweiterte Funktion erstellt, um die MAC-Adresse von einer VM zu erhalten, die auf VMware ESXi läuft.PowerShell erweiterte Funktionsausgabe PipelineVariable funktioniert nicht
function Get-MacFromVm {
[CmdletBinding(SupportsShouldProcess=$true)]
Param(
# The name of the VM of which we want to obtain the mac address.
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string[]]
$Name
)
Begin {}
Process {
foreach ($item in $Name) {
if ($PSCmdlet.ShouldProcess($item, "Getting the mac address")) {
Get-VM $item -PipelineVariable vm |
Get-NetworkAdapter |
Select-Object @{n="Name"; e={$vm.Name}},
@{n="ClientId"; e={$_.MacAddress -replace ":","-"}}
}
}
}
End {}
}
Bis jetzt funktioniert alles perfekt. Ich kann es auf eine der folgenden Arten verwenden und Ergebnisse zurück erhalten.
Er akzeptiert entweder ein einzelnes oder ein Array von Strings über den benannten Parameter oder als Pipeline-Eingang.
Get-MacFromVm -Name "playground"
Get-MacFromVm -Name "playground", "DC01"
"playground", "DC01" | Get-MacFromVm
Der Ausgang ist eine [PSCustomObject]
mit 2 Eigenschaften, einen Namen und die ClientId.
Jetzt beginnt das Problem, wenn ich das Ergebnis mit dem Parameter -PipelineVariable
auf mehrere andere Cmdlets verketten möchte.
Normalerweise sollte ich in der Lage sein, es wie folgt zu verwenden:
Get-MacFromVm -Name "playground" -PipelineVariable pv | % {$pv}
Aber es macht mir keine Ergebnisse zeigen, zurück. Wenn ich die $pv
durch $_
ersetze, zeigt es das korrekte Ergebnis, aber ich kann diese automatische Variable 2 oder 3 Cmdlets weiter in der Pipelinekette nicht verwenden.
Obwohl ich dies lösen kann, indem Sie die -OutVariable
verwenden und/oder in mehrere Zeilen aufteilen. Ich möchte wissen, warum das nicht funktioniert, ich möchte wissen, was ich hier vermisse.
Was ist Ihre PowerShell-Version? –
5.1.15063.483 unter Windows 10. – Adamar