functions/New-NetworkBridge.ps1

function New-NetworkBridge
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory)]
        [string]
        $Name,

        # ip/mask
        [string]
        $IpAddress,

        [string[]]
        $AdapterName,

        [switch]
        $UseSpanningTreeProtocol
    )

    if (Get-NetworkBridge -Name $Name)
    {
        Write-PSFMessage -String Error.BridgeExists -StringValues $Name
        return
    }

    $null = ip link add name $Name type bridge
    $null = ip link set $Name up

    $connections = bridge -j link | ConvertFrom-Json | Where-Object master -eq $Name
    foreach ($adapter in $AdapterName)
    {
        if ($connections | Where-Object -Property ifname -eq $adapter)
        {
            Write-PSFMessage -String Warning.BridgeConnectionExists -StringValues $Name, $adapter
            continue
        }

        $null = ip link set $adapter up
        $null = ip link set $adapter master $Name
    }

    foreach ($connection in $connections)
    {
        if ($UseSpanningTreeProtocol.IsPresent)
        {
            $null = bridge link set $connection.ifname state 3
        }
        elseif ($connections.state -ne 'disabled')
        {
            $null = bridge link set $connection.ifname state 0
        }
    }

    if ($IpAddress)
    {
        $null = ip address add dev $Name $IpAddress
    }
}