57 lines
1.7 KiB
PowerShell
57 lines
1.7 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Finds the local ESXi network Port-ID where a VM is assigned
|
|
.DESCRIPTION
|
|
Reports back a VM's Port-ID according to the local ESXi host. This correlates to the Port-ID which is displayed via ESXTop
|
|
.NOTES
|
|
Author: Kyle Ruddy, @kmruddy, thatcouldbeaproblem.com
|
|
.PARAMETER vm
|
|
The name of the desired VM
|
|
.EXAMPLE
|
|
PS> .\Get-VMNetworkPortId.ps1 -vm vmname
|
|
.EXAMPLE
|
|
PS> Get-VM -Name vmname | .\Get-VMNetworkPortId.ps1
|
|
#>
|
|
[CmdletBinding(SupportsShouldProcess=$True)]
|
|
param(
|
|
[Parameter(Mandatory=$true,Position=0,ValueFromPipelineByPropertyName=$true)]
|
|
[Alias('Name')]
|
|
[String[]]$vm
|
|
)
|
|
|
|
Begin {
|
|
#Create an array to store output prior to return
|
|
$output = @()
|
|
|
|
}
|
|
|
|
Process {
|
|
#Loop through each of the input values
|
|
foreach ($v in $vm) {
|
|
#Validate the input is a valid VM
|
|
$vmobj = Get-VM -Name $v -erroraction silentlycontinue
|
|
if (!$vmobj) {Write-Verbose "No VM found by the name $v."}
|
|
else {
|
|
#Create a temporary object to store individual ouput
|
|
$tempout = "" | select VM,PortId
|
|
#Start an ESXCLI session with the host where the VM resides
|
|
$esxcli = Get-EsxCli -VMHost $vmobj.VMHost -v2
|
|
#ESXCLI call to obtain information about the VM, specifically its WorldID
|
|
$vmNetInfo = $esxcli.network.vm.list.Invoke() | ?{$_.Name -eq $vmobj.Name}
|
|
#Create spec to poll the host for the network information of the VM
|
|
$portArgs = $esxcli.network.vm.port.list.CreateArgs()
|
|
$portArgs.worldid = $vmNetInfo.WorldID
|
|
#Output the values to the temporary object
|
|
$tempout.VM = $vmobj.Name
|
|
$tempout.PortId = $esxcli.network.vm.port.list.Invoke($portArgs).PortId
|
|
$output += $tempout
|
|
}
|
|
}
|
|
}
|
|
|
|
End {
|
|
|
|
return $output
|
|
|
|
}
|