J'ai créé une fonction avancée pour obtenir l'adresse MAC à partir d'une machine virtuelle exécutée sur VMware ESXi.La sortie de fonction avancée de PowerShell PipelineVariable ne fonctionne pas
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 {}
}
Jusqu'à présent, tout fonctionne parfaitement. Je peux l'utiliser de l'une des façons suivantes et obtenir des résultats.
Il accepte un seul ou un tableau de chaînes via le paramètre nommé ou comme entrée de pipeline.
Get-MacFromVm -Name "playground"
Get-MacFromVm -Name "playground", "DC01"
"playground", "DC01" | Get-MacFromVm
La sortie est un [PSCustomObject]
avec 2 propriétés, un nom et ClientId.
Maintenant, le problème commence lorsque je veux enchaîner le résultat à plusieurs autres cmdlets en utilisant le paramètre -PipelineVariable
.
Normalement, je devrais pouvoir l'utiliser comme ceci:
Get-MacFromVm -Name "playground" -PipelineVariable pv | % {$pv}
Mais il ne me montre pas de résultats retour. Si je remplace le $pv
par $_
, il affiche le résultat correct, mais je ne peux pas utiliser cette variable automatique 2 ou 3 cmdlets plus loin dans la chaîne de pipeline.
Bien que je peux résoudre ce problème en utilisant le -OutVariable
et/ou le diviser en plusieurs lignes. Je veux savoir pourquoi cela ne fonctionne pas, je veux savoir ce qui me manque ici.
Quelle est votre version de PowerShell? –
5.1.15063.483 sous Windows 10. – Adamar