PowerShell Direct + Hot Add NIC == Give me an IP address

Here is a fun script snippet that is possible with Windows 10:

function addNicWithIP([string]$VMName,$cred, [string]$Switch, [string]$IPaddress, [string]$subnetPrefixLength){
$newNetAdapter = Add-VMNetworkAdapter -VMName $VMName -SwitchName $Switch -Passthru
Write-Output "[$($VMName)]:: Wait for IP address and create virtual switch"
waitForPSDirect $VMName $cred
icm -VMName $VMName -Credential $cred {
param($IPAddress, $subnetPrefixLength, $MacAddress)
# Wait for the NIC to appear
do {sleep 1} until (@(get-netadapter | ? PermanentAddress -eq $MacAddress).Count -eq 1)
# Setup IP Address
New-NetIPAddress -IPAddress $IPAddress `
-InterfaceAlias (get-netadapter | ? PermanentAddress -eq $MacAddress).Name `
-PrefixLength $subnetPrefixLength
} -ArgumentList $IPAddress, $subnetPrefixLength, $newNetAdapter.MacAddress
}

What this does is:

  1. Adds a new network adapter to a running virtual machine
  2. Finds the new network adapter inside the virtual machine
  3. Assigns a static IP address to the new network adapter

You can call it like this:

addNicWithIP -VMName "PowerShell Container" -cred $localCred -Switch "Virtual Switch" -IPaddress "192.168.10.10" -subnetPrefixLength "24"

Cheers,
Ben