Public/Disconnect-SilkCNode.ps1

function Disconnect-SilkCNode {
    param(
        [Parameter(Mandatory)]
        [ipaddress] $cnodeIP
    )


    $portal = Get-IscsiTargetPortal | Where-Object {$_.TargetPortalAddress -eq $cnodeIP.IPAddressToString}

    if ($portal) {
        Remove-IscsiTargetPortal -TargetPortalAddress $cnodeIP.IPAddressToString -InitiatorInstanceName $portal.InitiatorInstanceName -InitiatorPortalAddress $portal.InitiatorPortalAddress -Confirm:0 | Out-Null
        Get-IscsiTarget | Update-IscsiTarget | Out-Null
        Get-IscsiTargetPortal | Update-IscsiTargetPortal | Out-Null
        Update-MPIOClaimedHW -Confirm:0 | Out-Null # This effectively rescans
    }

    # Removes persistence for those now-undiscovered sessions

    $allConnections = Get-IscsiConnection | where-object {$_.TargetAddress -eq $cnodeIP.IPAddressToString}

    $killSessions =  $allConnections | Get-IscsiSession | Where-Object {$_.IsDiscovered -eq 0}  # ensure unique sessions for the desired portal
    foreach ($k in $killSessions) {
        Unregister-IscsiSession -SessionIdentifier $k.SessionIdentifier -ErrorAction SilentlyContinue 
    }

    Update-MPIOClaimedHW -Confirm:0 | Out-Null # Rescan

    # Now, add the desired number of sessions back in...
    $return = Get-SilkSessions
    return $return

}