Get-VMNetworkPortId
This script can be used to find the network Port-ID on the lost host.
This commit is contained in:
56
Scripts/Get-VMNetworkPortId.ps1
Normal file
56
Scripts/Get-VMNetworkPortId.ps1
Normal file
@@ -0,0 +1,56 @@
|
||||
<#
|
||||
.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 $vm."}
|
||||
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
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user