Skip to content

New-NetworkAdapter

VMware: Creates a new virtual network adapter

#Requires -Version 5.1
#Requires -Modules VMware.VimAutomation.Core
[CmdletBinding(DefaultParameterSetName = "Default")]
Param(
    [Parameter(Mandatory = $true, ParameterSetName = "Default")]
    [Parameter(Mandatory = $true, ParameterSetName = "Switch")]
    [Parameter(Mandatory = $true, ParameterSetName = "PortGroup")]
    [string]$VIServer,
    [Parameter(Mandatory = $true, ParameterSetName = "Default")]
    [Parameter(Mandatory = $true, ParameterSetName = "Switch")]
    [Parameter(Mandatory = $true, ParameterSetName = "PortGroup")]
    [pscredential]$VICredential,
    [Parameter(Mandatory = $true, ParameterSetName = "Default")]
    [Parameter(Mandatory = $true, ParameterSetName = "Switch")]
    [Parameter(Mandatory = $true, ParameterSetName = "PortGroup")]
    [string]$VMName,
    [Parameter(Mandatory = $true, ParameterSetName = "Default")]
    [string]$Network,
    [Parameter(Mandatory = $true, ParameterSetName = "PortGroup")]
    [string]$PortGroupName,
    [Parameter(Mandatory = $true, ParameterSetName = "Switch")]
    [string]$SwitchName,
    [Parameter(Mandatory = $true, ParameterSetName = "Switch")]
    [string]$PortID,
    [Parameter(ParameterSetName = "Default")]
    [Parameter(ParameterSetName = "Switch")]
    [Parameter(ParameterSetName = "PortGroup")]
    [ValidateSet('e1000', 'Flexible', 'Vmxnet', 'EnhancedVmxnet', 'Vmxnet3')]
    [string]$AdapterType,
    [Parameter(ParameterSetName = "Default")]
    [Parameter(ParameterSetName = "Switch")]
    [Parameter(ParameterSetName = "PortGroup")]
    [string]$MacAddress,
    [Parameter(ParameterSetName = "Default")]
    [Parameter(ParameterSetName = "Switch")]
    [Parameter(ParameterSetName = "PortGroup")]
    [switch]$StartConnected,
    [Parameter(ParameterSetName = "Default")]
    [Parameter(ParameterSetName = "Switch")]
    [Parameter(ParameterSetName = "PortGroup")]
    [switch]$WakeOnLan
)
Process {
    try {
        $vmServer = Connect-VIServer -Server $VIServer -Credential $VICredential -ErrorAction Stop
        $vm = Get-VM -Server $vmServer -Name $VMName -ErrorAction Stop
        $newArgs = @{ ErrorAction = 'Stop'; Server = $vmServer; VM = $vm; StartConnected = $StartConnected; WakeOnLan = $WakeOnLan }
        if ($PSCmdlet.ParameterSetName -eq "Switch") {
            $vdSwitch = Get-VDSwitch -Name $SwitchName -Server $vmServer -ErrorAction Stop
            $adapter = New-NetworkAdapter @newArgs -DistributedSwitch $vdSwitch -PortId $PortID
        }
        elseif ($PSCmdlet.ParameterSetName -eq "PortGroup") {
            $vdGroup = Get-VDPortgroup -Name $PortGroupName -Server $vmServer -ErrorAction Stop
            $adapter = New-NetworkAdapter @newArgs -Portgroup $vdGroup
        }
        else { $adapter = New-NetworkAdapter @newArgs -NetworkName $Network }
        $setArgs = @{ ErrorAction = 'Stop'; Server = $vmServer; NetworkAdapter = $adapter; Confirm = $false }
        if ($PSBoundParameters.ContainsKey('AdapterType')) { $null = Set-NetworkAdapter @setArgs -Type $AdapterType }
        if ($PSBoundParameters.ContainsKey('MacAddress')) { $null = Set-NetworkAdapter @setArgs -MacAddress $MacAddress }
        $result = Get-NetworkAdapter -Server $vmServer -VM $vm -ErrorAction Stop | Select-Object *
        if ($null -ne $result) { $result | Add-Member -NotePropertyName Timestamp -NotePropertyValue (Get-Date -Format "yyyy-MM-dd HH:mm:ss") -PassThru -Force }
    }
    catch { throw }
    finally { if ($null -ne $vmServer) { Disconnect-VIServer -Server $vmServer -Force -Confirm:$false -ErrorAction SilentlyContinue } }
}

IP address or DNS name of the vSphere server

PSCredential object for authenticating with the server

Virtual machine to attach the new network adapter to

Name of the network to connect to

Standard or distributed port group name

Virtual switch to connect to

Port of the specified distributed switch

Type of the network adapter

Optional MAC address for the adapter

Off

Start connected when VM powers on

Off

Enable Wake-on-LAN

An interactive directory of PowerShell scripts.