我創建了一個高級函數來從運行在VMware ESXi上的VM獲取MAC地址。PowerShell高級功能輸出PipelineVariable不起作用
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 {}
}
到目前爲止,一切都很完美。 我可以通過以下任何方式使用它並獲得結果。
它通過命名參數或流水線輸入接受單個或字符串數組。
Get-MacFromVm -Name "playground"
Get-MacFromVm -Name "playground", "DC01"
"playground", "DC01" | Get-MacFromVm
的輸出是一個與[PSCustomObject]
2屬性,名稱和所述客戶端Id。
現在,當我想通過使用參數-PipelineVariable
將結果鏈接到多個其他cmdlet時,問題就開始了。
通常情況下,我應該能夠使用它像這樣:
Get-MacFromVm -Name "playground" -PipelineVariable pv | % {$pv}
但它不告訴我任何結果回來。如果我將$pv
替換爲$_
,它確實顯示了正確的結果,但我無法在管道鏈中使用自動變量2或3的更小命令。
雖然我可以通過使用-OutVariable
和/或將其分成多行來解決此問題。 我想知道爲什麼這不起作用,我想知道我在這裏錯過了什麼。
什麼是您的PowerShell版本? –
5.1.15063.483在Windows 10上。 – Adamar