Hey Checkyourlogs Fans,

For your viewing pleasure we have added a nice modification to our BigDemo scripts used to provision environments for our demos and books.

This time we have cleaned up a lot of the manual steps required to get routing working in our example labs in #Azure.

The Routing and NAT Switch is what we have fixed up this time.

Now, it is a bit tricky to get all this working properly but we have a working prototype:

Function Install-NetNat {

    Write-Output -InputObject "[$($VMName)]:: Configuring NAT on the Hyper-V Internal Switch `"$($env:computername)`""
    $CheckNATSwitch = get-vmswitch | where Name -eq $virtualNATSwitchName | Select Name

    If ($CheckNATSwitch -ne $null) {
    write-Host "Internal NAT Switch Found"}
    Else {
    write-Host "Not Found"
    Write-Host "Creating NAT Switch"

    New-VMSwitch -SwitchName $virtualNATSwitchName -SwitchType Internal 
    $ifindex = Get-NetAdapter | Where Name -like *$virtualNATSwitchName* |  New-NetIPAddress -PrefixLength 24 
    Get-Netnat | Remove-NetNat -confirm:$false
    New-NetNat -Name $virtualNATSwitchName -InternalIPInterfaceAddressPrefix

Function Install-RRAS{
        [string] $VMName, 
        [string] $GuestOSName,
        [string] $IPAddress

    Add-VMNetworkAdapter -VMName $VMName -SwitchName $virtualNATSwitchName

    Invoke-Command -VMName $VMName -Credential $domainCred {
    Write-Output -InputObject "[$($VMName)]:: Setting InternetIP Address to"

    $null = New-NetIPAddress -IPAddress "" -InterfaceAlias 'Ethernet 2' -PrefixLength 24
    $newroute = ''
    Write-Output -InputObject "[$($VMName)]:: Configuring Default Gateway"
    $null = Get-Netroute | Where DestinationPrefix -eq "" | Remove-NetRoute -Confirm:$False
    #$null = Test-NetConnection localhost
    new-netroute -InterfaceAlias "Ethernet 2" -NextHop $newroute  -DestinationPrefix '' -verbose
    $null = Get-NetAdapter | where name -EQ "Ethernet" | Rename-NetAdapter -NewName CorpNet
    $null = Get-NetAdapter | where name -EQ "Ethernet 2" | Rename-NetAdapter -NewName Internet
    Write-Output -InputObject "[$($VMName)]:: Installing RRAS"
    $null = Install-WindowsFeature -Name RemoteAccess,Routing,RSAT-RemoteAccess-Mgmt 
    #$null =  Stop-Service -Name WDSServer -ErrorAction SilentlyContinue
    #$null = Set-Service -Name WDSServer -StartupType Disabled -ErrorAction SilentlyContinue

    Write-Output -InputObject "[$($VMName)]:: Coniguring RRAS - Adding Internal and External Adapters"
    $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "ras set conf ENABLED"
    $null = Set-Service -Name RemoteAccess -StartupType Automatic
    $null = Start-Service -Name RemoteAccess

     Write-Output -InputObject "[$($VMName)]:: Configuring NAT - Lab is now Internet Enabled"
    $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "routing ip nat install"
    $null = Start-Process -Wait:$true -FilePath "netsh" -ArgumentList "routing ip nat add interface ""CorpNet"""
    $null = Test-NetConnection
    $null = Test-NetConnection
    $null = cmd.exe /c "netsh routing ip nat add interface $externalinterface"
    $null = cmd.exe /c "netsh routing ip nat set interface $externalinterface mode=full"
    $null = Test-NetConnection
   # $null = Test-NetConnection $($Subnet)1
    $null = Test-NetConnection
     Write-Output -InputObject "[$($VMName)]:: Disable FireWall"
    $null = cmd.exe /c "netsh firewall set opmode disable"


The real test for this is to see if we can get out to the Internet automatically once configured.

The code is up on github: https://github.com/dkawula/Deploying-System-Center-Virtual-Machine-Manager-2016

This is really handy because it cuts down on the time for me to write the next revisions of the books.

Happy Friday and happy learning everyone,

Dave Kawula – Founder MVPDays Publishing