RRAS Server Stats – Powershell Script by Harmik Batth

A great Powershell script by Harmik to show Stats and connections to RRAS.

http://harmikbatth.com/2020/05/27/rras-always-on-vpn-stats-remotely/


#############################################################################################
#
# Script: Get-AlwaysOnVPN-Stats-GUI.ps1
#
# Author: Harmik Singh Batth
# Website: www.harmikbatth.com
#
# Date: 01/05/2020
#
# About: This script is designed to pull data from different RRAS Servers and present one view.
#
# Usage: To use this script, execute the script and configure VPN Servers initially.
# Next time, you should be able to connect and present data from all configured RRAS Servers.
#
# Requirements:
# Requires -    PSRemoting must be enabled on RRAS Server
#               To Configure - Enable-PSRemoting -Force
# Requires -    RRAS Servers should be on Trusted List on WSMAN
#               To Check - "Get-Item WSMan:\localhost\client\trustedhosts
#               To Configure - Set-Item WSMan:\localhost\Client\TrustedHosts -Value "ServerName01, ServerName02, ServerName03, ServerName04" -Force
#
# Versions:
# 01/05/2020 - 1.0 - Initial release creation by Harmik Singh Batth
# 13/05/2020 - 1.1 - Added Export Button, which will allow Export of Data to CSV files
#
#############################################################################################

Begin {
   
    cls

    #region Calculated Variables
   
        #   Different OS versions use different sizes of windows, these corrections allow the form to be correctly sized in any OS.
        #   Switch -wildcard doesn't work in Powershell 2 so OS version has extra sections removed.
        $OSVer = ((Get-WmiObject Win32_OperatingSystem).Version).split(".")[0..1] -join "."
        Switch ($OSVer)
        {
            6.3 {$FormHorizPadding = 21; $FormVertPadding = 43}     #Windows 8.1 & Windows Server 2012 R2
            6.2 {$FormHorizPadding = 21; $FormVertPadding = 43}     #Windows 8 & Windows Server 2012
            6.1 {$FormHorizPadding = 10; $FormVertPadding = 29}     #Windows 7 & Windows Server 2008 R2
            6.0 {$FormHorizPadding = 10; $FormVertPadding = 29}     #Windows Vista & Windows Server 2008
            5.2 {$FormHorizPadding = 21; $FormVertPadding = 43}     #Windows Server 2003
            5.1 {$FormHorizPadding = 21; $FormVertPadding = 43}     #Windows XP
        }
       
        #Check for Configuration Files
        $UserLocalAppData = $env:LOCALAPPDATA
        $ConfigurationFolder = "$UserLocalAppData\RRASReporting"
        $ConfigurationFile = "$ConfigurationFolder\RRAS-Configuration.txt"
        $ExportFolder = "$UserLocalAppData\RRASReporting"
        $ExportFile = "$ExportFolder\Export.csv"
        $Global:ConfigurationUploaded = "" 
        $Script:TabIndex = 0
       
    #endregion Calculated Variables
   
    # Assemblies
    try {
        Add-Type -AssemblyName "System.Drawing" -ErrorAction Stop
        Add-Type -AssemblyName "System.Windows.Forms" -ErrorAction Stop
    }
    catch [System.UnauthorizedAccessException] {
        Write-Warning -Message "Access denied when attempting to load required assemblies" ;
    }
    catch [System.Exception] {
        Write-Warning -Message "Unable to load required assemblies. Error message: $($_.Exception.Message) Line: $($_.InvocationInfo.ScriptLineNumber)" ;
    }
}
Process
{

#region Functions

    # Functions
    function Load-Form {        
        $Form.Controls.AddRange(@(
            $ComboBoxTypes,
            $CheckBoxCurrentData,
            $DateTimeStart,
            $DateTimeEnd,
            $TextBoxUserName,
            $LabelDateStart,
            $LabelDateEnd,
            #$LabelUserName,
            $ButtonExecute,
            $ButtonExport,
            $ButtonConfiguration,
            $RadioButtonSelectRRASServer,            
            $OutputBox,
            $DGVResults,
            $GBLog,
            $GBResults,
            $GBRRASServersSelect,            
            $GBUser,
            $GBOptions,        
            $GBActions,
            $GBSettings,
            $ButtonConfigExecute,
            $ButtonConfigRRASAdd,
            $ButtonConfigRRASRemove,
            $ButtonConfigBackToMainForm,
            $GBConfigActions,
            $DGVConfigResults,
            $OutputConfigBox,
            $LabelRRASServer,
            $LabelRRASUsername,
            $LabelRRASPassword,
            $TextBoxRRASServer,
            $TextBoxRRASUsername,
            $TextBoxRRASPassword,
            $GBConfigLog,
            $GBConfigResults,
            $GBConfigRRAS,
            $StatusBar
        ))
       
        Try
        {  
            $Form.Add_Shown({$Form.Activate()})                        
            $Form.Add_Shown(
            {
                if ($Global:ConfigurationUploaded -eq "Success")
                {        
                    Write-OutputBox "Configuration File found: $ConfigurationFile, Loading main form" -Type INFO   
                    LoadExecutionForm
                }
                Else
                {
                    Write-OutputBox  "No Configuration File found: $ConfigurationFile, User will be prompted to Create one" -Type WARNING
                    LoadConfigurationForm
                }
            }
            )
            $Form.Add_Closing({CleanUpScript})     
            $Form.ShowDialog() | Out-Null                    
        }
        Catch
        {
            Write-OutputBox  "Script encountered issues " -Type ERROR
        }
    }
   
    function LoadExecutionForm
    {
        $RadioButtonSelectRRASServer.Visible=$true
        $GBRRASServersSelect.Visible=$true
           
        $ComboBoxTypes.Visible=$true
        $CheckBoxCurrentData.Visible=$true
        $DateTimeStart.Visible=$true
        $DateTimeEnd.Visible=$true     
        $LabelDateStart.Visible=$true
        $LabelDateEnd.Visible=$true
        #$LabelUserName.Visible=$true
        $GBOptions.Visible=$true
       
        $TextBoxUserName.Visible=$true
        $GBUser.Visible=$true
       
        $ButtonExecute.Visible=$true
        $ButtonExport.Visible=$true
        $GBActions.Visible=$true
       
        $ButtonConfiguration.Visible=$true                
        $GBSettings.Visible=$true
       
        $DGVResults.Visible=$true
        $GBResults.Visible=$true
       
        $OutputBox.Visible=$true
        $GBLog.Visible=$true        
       
        $LabelRRASServer.Visible=$false
        $LabelRRASUsername.Visible=$false
        $LabelRRASPassword.Visible=$false
        $TextBoxRRASServer.Visible=$false
        $TextBoxRRASUsername.Visible=$false
        $TextBoxRRASPassword.Visible=$false
        $GBConfigRRAS.Visible=$false
       
        $ButtonConfigRRASAdd.Visible=$false
        $ButtonConfigRRASRemove.Visible=$false
        $ButtonConfigExecute.Visible=$false    
        $ButtonConfigBackToMainForm.Visible=$false
        $GBConfigActions.Visible=$false
       
        $DGVConfigResults.Visible=$false
        $GBConfigResults.Visible=$false
       
        $OutputConfigBox.Visible=$false
        $GBConfigLog.Visible=$false    
   
        if ($Global:ConfigurationUploaded -eq "Success")       
        {
            Load-Connect
        }
    }
   
    function LoadConfigurationForm
    {
        $RadioButtonSelectRRASServer.Visible=$false
        $GBRRASServersSelect.Visible=$false
       
        $ComboBoxTypes.Visible=$false
        $CheckBoxCurrentData.Visible=$false
        $DateTimeStart.Visible=$false
        $DateTimeEnd.Visible=$false
        $LabelDateStart.Visible=$false
        $LabelDateEnd.Visible=$false
        #$LabelUserName.Visible=$false
        $GBOptions.Visible=$false
       
        $TextBoxUserName.Visible=$false
        $GBUser.Visible=$false
       
        $ButtonExecute.Visible=$false
        $ButtonExport.Visible=$false
        $GBActions.Visible=$false
       
        $ButtonConfiguration.Visible=$false
        $GBSettings.Visible=$false
       
        $DGVResults.Visible=$false
        $GBResults.Visible=$false
       
        $OutputBox.Visible=$false
        $GBLog.Visible=$false
               
        $LabelRRASServer.Visible=$true
        $LabelRRASUsername.Visible=$true
        $LabelRRASPassword.Visible=$true
        $TextBoxRRASServer.Visible=$true
        $TextBoxRRASUsername.Visible=$true
        $TextBoxRRASPassword.Visible=$true
        $GBConfigRRAS.Visible=$true
                       
        $ButtonConfigRRASAdd.Visible=$true
        $ButtonConfigRRASRemove.Visible=$true
        $ButtonConfigExecute.Visible=$true
        $ButtonConfigBackToMainForm.Visible=$true      
        $GBConfigActions.Visible=$true
       
        $DGVConfigResults.Visible=$true
        $GBConfigResults.Visible=$true
       
        $OutputConfigBox.Visible=$true     
        $GBConfigLog.Visible=$true
       
        #$TextBoxRRASServer.Focus()
       
        Load-ConnectConfig
    }
   
    function CheckConfigurationFile
    {
        if (test-path -path $ConfigurationFile)
        {      
            Write-OutputBox "Configuration File: $ConfigurationFile found, and will be used to connect to servers" -Type INFO
               
            #Checking Contents of the file, if empty then
            if ((Get-Content -Path $ConfigurationFile) -eq $null)
            {
                Write-OutputBox "No data found in Configuration File: $ConfigurationFile, user will be prompted to re-configure"    -Type INFO         
                $Global:ConfigurationUploaded = ""
            }
            Else
            {  
                $Global:ConfigurationUploaded = "Success"            
            }
        }
        Else
        {
            Write-OutputBox "No Configuration File: $ConfigurationFile found, user will be prompted to create one." -Type INFO 
            $Global:ConfigurationUploaded = ""        
        }
    }

    function CleanUpScript
    {
        #Clean Up Variables and PS-Sessions
        Try
        {          
            #Dispose PSSessions
            Get-PSSession | ? ComputerName -match "vpn" | Remove-PSSession
        }
        Catch
        {
            Write-OutputBox  "Script encountered issues while removing PS-Sessions" -Type ERROR
        }
    }
   
    function Invoke-CleanControls {
        param(
            [parameter(Mandatory=$true)]
            [ValidateSet("All","Log")]
            $Option
        )
        if ($Option -eq "All") {
            $DGVResults.Rows.Clear()
            #Clean Output Box if required
            #$OutputBox.ResetText()
        }
        if ($Option -eq "Log") {
            #Clean Output Box if required
            #$OutputBox.ResetText()
        }
    }

    function Invoke-CleanConfigControls {
        param(
            [parameter(Mandatory=$true)]
            [ValidateSet("All","Log")]
            $Option
        )
        if ($Option -eq "All") {
            $DGVConfigResults.Rows.Clear()
            #Clean Output Box if required
            #$OutputConfigBox.ResetText()
        }
        if ($Option -eq "Log") {
            #Clean Output Box if required
            #$OutputConfigBox.ResetText()
        }
    }
   
    function ModifyTextBox
    {
        if ($TextBoxUserName.Text -eq "Enter UserName or DeviceName")
        {
            $TextBoxUserName.Text = ""
        }
        Elseif (($TextBoxUserName.Text -eq $null) -or ($TextBoxUserName.Text -eq "") -or ($TextBoxUserName.Text -eq " "))
        {
            $TextBoxUserName.Text = "Enter UserName or DeviceName"
        }      
    }
   
    function Activate-DateControls
    {
        if (($ComboBoxTypes.SelectedIndex -eq 2) -or ($ComboBoxTypes.SelectedIndex -eq 3) -or ($ComboBoxTypes.SelectedIndex -eq 6))
        {
            $CheckBoxCurrentData.Enabled = $true
            $DateTimeStart.Enabled = $true
            $DateTimeEnd.Enabled = $true
            if (($ComboBoxTypes.SelectedIndex -eq 2) -or ($ComboBoxTypes.SelectedIndex -eq 6))
            {
                $TextBoxUserName.Enabled=$true
            }
            Else
            {
                $TextBoxUserName.Enabled=$false
            }
        }
        Else
        {
            $CheckBoxCurrentData.Enabled = $false          
            $DateTimeStart.Enabled = $false
            $DateTimeEnd.Enabled = $false          
            $TextBoxUserName.Enabled=$false        
        }      
    }
   
    function Activate-CheckBoxControls
    {      
        if ($CheckBoxCurrentData.Checked -eq $false)
        {
            $DateTimeStart.Enabled = $true
            $DateTimeEnd.Enabled = $true                       
        }          
        Else
        {
            $DateTimeStart.Enabled = $false
            $DateTimeEnd.Enabled = $false                      
        }
    }
   
    function Activate-Controls {
        #[System.Windows.Forms.Application]::UseWaitCursor = $false    
        $ButtonExecute.Enabled=$true
        $ButtonExport.Enabled=$true
        $ButtonConfiguration.Enabled=$true
        $ComboBoxTypes.Enabled=$true
        Activate-DateControls
        Activate-CheckBoxControls
        ModifyTextBox
        #$RadioButtonSelectRRASServer.Focus()          
    }
   
    function DeActivate-Controls {
        #[System.Windows.Forms.Application]::UseWaitCursor = $true     
        $ButtonExecute.Enabled=$false
        $ButtonExport.Enabled=$false
        $ButtonConfiguration.Enabled=$false
        $ComboBoxTypes.Enabled=$false
        Activate-DateControls
        Activate-CheckBoxControls
        ModifyTextBox
    }

    function Write-OutputBox {
        param(
            [parameter(Mandatory=$true)]
            [string]$OutputBoxMessage,
            [parameter(Mandatory=$true)]
            [ValidateSet("WARNING","ERROR","INFO")]
            [string]$Type
        )
        Begin {
            $DateTime = (Get-Date).ToLongTimeString()
        }
        Process {
            if ($OutputBox.Text.Length -eq 0) {
                $OutputBox.Text = "$($DateTime) - $($Type): $($OutputBoxMessage)"
                [System.Windows.Forms.Application]::DoEvents()
                $OutputBox.SelectionStart = $OutputBox.Text.Length
                $OutputBox.ScrollToCaret()
            }
            else {
                $OutputBox.AppendText("`n$($DateTime) - $($Type): $($OutputBoxMessage)")
                [System.Windows.Forms.Application]::DoEvents()
                $OutputBox.SelectionStart = $OutputBox.Text.Length
                $OutputBox.ScrollToCaret()
            }  
        }
    }
   
    function Write-OutputConfigBox {
        param(
            [parameter(Mandatory=$true)]
            [string]$OutputBoxMessage,
            [parameter(Mandatory=$true)]
            [ValidateSet("WARNING","ERROR","INFO")]
            [string]$Type
        )
        Begin {
            $DateTime = (Get-Date).ToLongTimeString()
        }
        Process {
            if ($OutputConfigBox.Text.Length -eq 0) {
                $OutputConfigBox.Text = "$($DateTime) - $($Type): $($OutputBoxMessage)"
                [System.Windows.Forms.Application]::DoEvents()
                $OutputConfigBox.SelectionStart = $OutputConfigBox.Text.Length
                $OutputConfigBox.ScrollToCaret()
            }
            else {
                $OutputConfigBox.AppendText("`n$($DateTime) - $($Type): $($OutputBoxMessage)")
                [System.Windows.Forms.Application]::DoEvents()
                $OutputConfigBox.SelectionStart = $OutputConfigBox.Text.Length
                $OutputConfigBox.ScrollToCaret()
            }  
        }
    }
   
    function Connect-RRASServers
    {
        if (test-path -path $ConfigurationFile)
        {      
            # Get RRAS Servers from the Configuration File                         
            ForEach ($RRASserver in (Get-content -path $ConfigurationFile))
            {
                $RRASServerDetails = $RRASServer.Split(",")
                $RRASserverName = $RRASServerDetails[0]
               
                $RRASLogin = $RRASServerDetails[1]
               
                $RRASPassword = (Get-Content -Path "$UserLocalAppData\RRASreporting\$RRASserverName.txt" | ConvertTo-SecureString)
                $LoginUser = "$RRASserverName\$RRASLogin"
               
                $RRASCred = New-Object -TypeName System.Management.Automation.PSCredential  -ArgumentList $LoginUser,$RRASPassword
               
                # Connect to RRAS Server
               
                # Check for Variable if already exists, if it does, Then just do the PS-Sessions only.
                if (Get-Variable | ? Name -eq $RRASServerName)
                {
                    if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                    {                          
                        Write-OutputBox -OutputBoxMessage "PS-Session for this Host already exists, existing session will be utilised" -Type INFO
                    }
                    Else
                    {
                        Write-OutputBox -OutputBoxMessage "Initiating connection to RRAS Server:  $RRASserverName" -Type INFO
                        try
                        {
                            $RRASserverName = New-PSSession -ComputerName $RRASserverName -Credential $RRASCred                            
                        }              
                        catch
                        {
                            Write-OutputBox -OutputBoxMessage "Unable to connect to RRAS Server: $RRASserverName" -Type ERROR; break
                        }
                        Write-OutputBox -OutputBoxMessage "Successfully connected to RRAS Server: $RRASserverName" -Type INFO                          
                    }
                }
                Else
                {                      
                    Write-OutputBox -OutputBoxMessage "Initiating connection to RRAS Server:  $RRASserverName" -Type INFO
                    New-Variable -Name $RRASserverName -Scope Global -Value (New-PSSession -ComputerName $RRASserverName -Credential $RRASCred)                    
                }
            }
        }
        Else
        {
            Write-OutputBox -OutputBoxMessage "No Configuration File found, user will be prompted to create one." -Type WARNING
        }
    }
   
    function Load-Connect
    {
        Write-OutputBox -OutputBoxMessage "Connecting to required RRAS Servers" -Type INFO

        if ($Global:ConfigurationUploaded -eq "Success")
        {            
            #Deactivate controls while inititaing forms
            DeActivate-Controls
       
            #Connect and Create PS-Sessions to RRAS Servers
            Connect-RRASServers
       
            #Activate controls as all forms are loaded now
            Activate-Controls
        }
    }
   
    function Load-ConnectConfig
    {
        Write-OutputConfigBox -OutputBoxMessage "Fetching Details of RRAS Servers" -Type INFO
               
        #Clear Datagrid rows
        $DGVConfigResults.Rows.Clear()
       
        #Connect and Create PS-Sessions to RRAS Servers
        LoadConfiguration
               
        Write-OutputConfigBox -OutputBoxMessage "Successfully obtained information about RRAS Servers" -Type INFO
    }

    function Update-StatusBar {
        param(
            [parameter(Mandatory=$true)]
            [ValidateSet("Ready","Updating","Validating","Enumerating")]
            [string]$Activity,
            [parameter(Mandatory=$true)]
            [string]$Text
        )
        $StatusBarPanelActivity.Text = $Activity
        $StatusBarPanelProcessing.Text = $Text             
        [System.Windows.Forms.Application]::DoEvents()
    }
   
    function Get-RRASGeneralInformation {        
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"
                    $script = {Get-RemoteAccess}   
                    $Session = (Get-PSSession | ? Computername -eq "$RRASserverName")
                    $var = Invoke-Command -Session $Session -ScriptBlock $script

                    $VpnStatus = $var.VpnStatus
                    $RoutingStatus = $var.RoutingStatus
                    $InternetInterface = $var.InternetInterface
                    $InternalInterface = $var.InternalInterface
                    $IPAssignmentMethod = $var | Select -ExpandProperty IPAssignmentMethod
                    $IPAddressRangeList = $var | Select -ExpandProperty IPAddressRangeList
                    $AuthenticationType = $var.AuthenticationType
                    $RadiusServerList =""
                    foreach ($RadiusServer in ($var | Select -ExpandProperty RadiusServerList))
                    {
                        $RadiusServerList += "$RadiusServer,"
                    }                                  

                    $DGVResults.Rows.Add($RRASserverName,$VpnStatus, $RoutingStatus, $InternetInterface, $InternalInterface, $IPAssignmentMethod, $IPAddressRangeList, $AuthenticationType, $RadiusServerList)
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS General Information data" -Type INFO            
            }        
        }
    }
   
    function Get-RemoteAccessAccounting
    {  
   
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"
                    $script = {Get-RemoteAccessAccounting}                 
                    $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script

                    $RadiusAccountingStatus = $var.RadiusAccountingStatus
                    $RadiusServerList =""
                    foreach ($RadiusServer in ($var | Select -ExpandProperty RemoteRadiusServerList))
                    {
                        $RadiusServerList += "$RadiusServer,"
                    }
                    $RemoteRadiusServerList = $RadiusServerList
                    $InboxAccountingStatus = $var.InboxAccountingStatus
                    $InboxStoreLimit = $var.InboxStoreLimit
                    $InboxStoreUsedBytes = [math]::round($var.InboxStoreUsedBytes/1GB, 2)
                    $InboxStoreUsedBytesInPercentage = ($var.InboxStoreUsedBytesInPercentage/100).ToString("P")
                    $InboxStoreFreeBytes = [math]::round($var.InboxStoreFreeBytes/1GB, 2)
                    $InboxStoreFreeBytesInPercentage = ($var.InboxStoreFreeBytesInPercentage/100).ToString("P")
                    $InboxStoreFirstRecordDate = $var.InboxStoreFirstRecordDate
                    $InboxStoreLastRecordDate = $var.InboxStoreLastRecordDate
                   
                    $DGVResults.Rows.Add($RRASserverName, $InboxAccountingStatus, $InboxStoreLimit, $InboxStoreUsedBytes, $InboxStoreUsedBytesInPercentage, $InboxStoreFreeBytes, $InboxStoreFreeBytesInPercentage, $InboxStoreFirstRecordDate, $InboxStoreLastRecordDate)
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Remote Access Accounting data" -Type INFO            
            }        
        }
    }
   
    function Get-RemoteAccessConnectionStatistics {        
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"
                   
                    $StartDate = Get-Date -Date $DateTimeStart.value -Format "MM-dd-yyyy hh:mm:ss tt"
                    $EndDate = Get-Date -Date $DateTimeEnd.value -Format "MM-dd-yyyy hh:mm:ss tt"
                   
                    if (($TextBoxUserName.Text -eq "Enter UserName or DeviceName") -or ($TextBoxUserName.Text -eq "") -or ($TextBoxUserName.Text -eq " ") -or ($TextBoxUserName.Text -eq $null))
                    {
                        $SelectedUser = $null
                    }
                    Else
                    {
                        $SelectedUser = $TextBoxUserName.Text
                        if ($SelectedUser -match "internal.dotars.gov.au")
                        {
                            #do Nothing
                        }
                        Else
                        {
                            if ($SelectedUser -match "xt")
                            {
                                $SelectedUser = "$SelectedUser.internal.dotars.gov.au"
                            }
                            Else
                            {
                                $SelectedUser = "$SelectedUser@internal.dotars.gov.au"
                            }                          
                        }
                    }
                   
                    if ($CheckBoxCurrentData.checked -eq $false)
                    {
                        if ($SelectedUser -ne $null)
                        {
                            $script = {param($StartdateTime,$EndDateTime,$Username) Get-RemoteAccessConnectionStatistics -StartDateTime $StartdateTime -EndDateTime $EndDateTime | ? UserName -match $Username}
                            Write-OutputBox -OutputBoxMessage  "Exeucting $script" -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $Startdate, $EndDate, $SelectedUser                               
                        }
                        Else
                        {
                            $script = {param($StartdateTime,$EndDateTime) Get-RemoteAccessConnectionStatistics -StartDateTime $StartdateTime -EndDateTime $EndDateTime}
                            Write-OutputBox -OutputBoxMessage  "Exeucting $script" -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $Startdate, $EndDate                              
                        }                      
                    }
                    Else
                    {
                        if ($SelectedUser -ne $null)
                        {
                            $script = {param($Username) Get-RemoteAccessConnectionStatistics | ? UserName -match $Username}
                            Write-OutputBox -OutputBoxMessage  "Exeucting $script" -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $SelectedUser
                        }
                        Else
                        {
                            $script = {Get-RemoteAccessConnectionStatistics}
                            Write-OutputBox -OutputBoxMessage  "Exeucting $script" -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script
                        }
                    }
                   
                    #Write-OutputBox -OutputBoxMessage "Executing: $script" -Type INFO
                    #Write-OutputBox -OutputBoxMessage "Fetching Data for RemoteAccessConnectionStatistics Start Date: $DateTimeStart.value and End Date: $DateTimeEnd.value " -Type INFO
                   
                    Foreach ($Row in $var)
                    {                    
                        $Username = $Row | Select -ExpandProperty UserName            
                        $ClientIPAddress = $Row.ClientIPAddress.IPAddressToString
                        $ClientExternalAddress = $Row.ClientExternalAddress                    
                        $AuthMethod = $Row.AuthMethod
                        $TunnelType = $Row.TunnelType
                        $UserActivityState = $Row.UserActivityState
                        $ConnectionStartTime = $Row.ConnectionStartTime.DateTime
                        $DateTimeNow = Get-Date
                        $Time= New-TimeSpan -Start $Row.ConnectionStartTime.DateTime -End $DateTimeNow                     
                        $Time = ($Row.ConnectionStartTime).AddSeconds($Row.ConnectionDuration)
                        $secs = $Row.ConnectionDuration
                        $ts =  [timespan]::fromseconds($secs)                      
                        $ConnectionDuration = "{0:00}:{1:00}:{2:00}:{3:00}" -f  $time.days,$time.Hours,$time.Minutes,$time.seconds                     
                        $ConnectionDuration = "$($ts.hours):$($ts.minutes):$($ts.seconds)"
                        $TotalBytesIn = [math]::round($Row.TotalBytesIn/1GB, 2)
                        $TotalBytesOut = [math]::round($Row.TotalBytesOut/1GB, 2)                  

                        $DGVResults.Rows.Add($RRASserverName,$Username,$ClientIPAddress,$ClientExternalAddress,$AuthMethod,$TunnelType,$ConnectionStartTime,$ConnectionDuration,$UserActivityState)
                    }
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Connection Statistics data" -Type INFO            
            }        
        }
    }
   
    function Get-RRASConnectionStatisticsSummary {        
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"

                    $StartDate = Get-Date -Date $DateTimeStart.value -Format "MM-dd-yyyy hh:mm:ss tt"
                    $EndDate = Get-Date -Date $DateTimeEnd.value -Format "MM-dd-yyyy hh:mm:ss tt"
                   
                    if ($CheckBoxCurrentData.checked -eq $false)
                    {
                        $script = {param($StartdateTime,$EndDateTime) Get-RemoteAccessConnectionStatisticsSummary -StartDateTime "$StartdateTime" -EndDateTime "$EndDateTime"}
                        $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $Startdate, $EndDate                              
                       
                        $TotalSessions = $var.TotalSessions
                        #$TotalDASessions = $var.TotalDASessions
                        $TotalVpnSessions = $var.TotalVpnSessions
                        $MaxConcurrentSessions = $var.MaxConcurrentSessions
                        #$TotalUniqueDAClients = $var.TotalUniqueDAClients
                        $AverageSessionsPerDay = $var.AverageSessionsPerDay
                        $TotalUniqueUsers = $var.TotalUniqueUsers
                       
                        $DGVResults.Rows.Add($RRASserverName, $TotalSessions, $TotalVpnSessions, $MaxConcurrentSessions, $AverageSessionsPerDay, $TotalUniqueUsers)
                    }
                    Else
                    {
                        $script = {Get-RemoteAccessConnectionStatisticsSummary}
                        $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script                     
                       
                        $TotalVpnConnections = $var.TotalVpnConnections
                        $TotalUniqueUsers = $var.TotalUniqueUsers
                        $MaxConcurrentConnections = $var.MaxConcurrentConnections
                        $TotalCumulativeConnections = $var.TotalCumulativeConnections
                        $TotalBytesIn = [math]::round($var.TotalBytesIn/1GB, 2)
                        $TotalBytesOut = [math]::round($var.TotalBytesOut/1GB, 2)

                        $DGVResults.Rows.Add($RRASserverName, $TotalVpnConnections, $TotalUniqueUsers, $MaxConcurrentConnections, $TotalCumulativeConnections, $TotalBytesIn, $TotalBytesOut)
                    }

                   
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Connection Statistics Summary data" -Type INFO            
            }        
        }
    }
   
    function Get-RemoteAccessHealth
    {        
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"
                    $script = {Get-RemoteAccessHealth}                 
                    $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script

                    Foreach ($Row in $var)
                    {
                        if (($Row.Component -eq "Server") -or ($Row.Component -eq "Vpn Addressing") -or ($Row.Component -eq "Vpn Connectivity") -or ($Row.Component -eq "Services"))
                        {
                            $Component = $Row | Select -ExpandProperty Component                   
                            $HealthState = $Row | Select -ExpandProperty HealthState                   
                            $TimeStamp = $Row | Select -ExpandProperty TimeStamp

                            $DGVResults.Rows.Add($RRASserverName, $Component, $HealthState, $TimeStamp)
                        }
                    }
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Remote Access Health data" -Type INFO            
            }        
        }
    }
   
    function Get-RemoteAccessRadius
    {        
        Process
        {
            ForEach ($RRASserver in (Get-content -path $configurationfile))
            {
                $RRASserverDetails = $RRASserver.Split(",")
                $RRASserverName = $RRASserverDetails[0]
               
                if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                {                
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"
                    $script = {Get-RemoteAccessRadius}                 
                    $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script

                    Foreach ($Row in $var)
                    {                      
                        $ServerName = $Row | Select -ExpandProperty ServerName
                        $Purpose = $Row | Select -ExpandProperty Purpose
                        $Score = $Row | Select -ExpandProperty Score
                        $Timeout = $Row | Select -ExpandProperty Timeout
                        $Port = $Row | Select -ExpandProperty Port
                        $AccountingOnOffMsg = $Row | Select -ExpandProperty AccountingOnOffMsg
                        $MsgAuthenticator = $Row | Select -ExpandProperty MsgAuthenticator

                        $DGVResults.Rows.Add($RRASserverName, $ServerName, $Purpose, $Score, $Timeout, $Port, $AccountingOnOffMsg, $MsgAuthenticator)                      
                    }
                    Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                    [System.Windows.Forms.Application]::DoEvents()
                }
                else
                {
                    Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                }                    
                   
                Update-StatusBar -Activity Ready -Text " "
                Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Remote Access Health data" -Type INFO            
            }        
        }
    }
   
    function Get-RemoteAccessUserActivity
    {        
        Process
        {
            if (($TextBoxUserName.Text -eq "Enter UserName or DeviceName") -or ($TextBoxUserName.Text -eq "") -or ($TextBoxUserName.Text -eq " ") -or ($TextBoxUserName.Text -eq $null))
            {
                Update-StatusBar -Activity Enumerating -Text " "                
                Update-StatusBar -Activity Validating -Text "Validating Username for Fetching User Activity Details"                   
                Write-OutputBox -OutputBoxMessage "Username Field cannot be left empty, Please Enter UserName or DeviceName" -Type WARNING
            }
            Else
            {              
                ForEach ($RRASserver in (Get-content -path $configurationfile))
                {
                    $RRASserverDetails = $RRASserver.Split(",")
                    $RRASserverName = $RRASserverDetails[0]
                   
                    if (Get-PSSession | ? ComputerName -eq $RRASserverName)
                    {                
                        Update-StatusBar -Activity Enumerating -Text " "                
                        Update-StatusBar -Activity Validating -Text "Validating connection to $RRASserver"                 
                       
                        $StartDate = Get-Date -Date $DateTimeStart.value -Format "MM-dd-yyyy hh:mm:ss tt"
                        $EndDate = Get-Date -Date $DateTimeEnd.value -Format "MM-dd-yyyy hh:mm:ss tt"
                        $SelectedUser = $TextBoxUserName.Text
                       
                        if ($SelectedUser -match "internal.dotars.gov.au")
                        {
                            #do Nothing
                        }
                        Else
                        {
                            if ($SelectedUser -match "xt")
                            {
                                $SelectedUser = "$SelectedUser.internal.dotars.gov.au"
                            }
                            Else
                            {
                                $SelectedUser = "$SelectedUser@internal.dotars.gov.au"
                            }                          
                        }
                                               
                        if ($CheckBoxCurrentData.Checked -eq $false)
                        {
                            $script = {param($StartdateTime,$EndDateTime,$Username) Get-RemoteAccessUserActivity -StartDateTime $StartdateTime -EndDateTime $EndDateTime -UserName $Username }
                            Write-OutputBox -OutputBoxMessage "Executing script: $Script with paramaters: $Startdate, $EndDate, $SelectedUser " -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $Startdate, $EndDate, $SelectedUser                                                           
                        }
                        Else
                        {
                            $script = {param($Username) Get-RemoteAccessUserActivity -UserName $Username}
                            Write-OutputBox -OutputBoxMessage "Executing script: $Script with parameters: $SelectedUser " -Type INFO
                            $var = Invoke-Command -Session (Get-PSSession | ? Computername -eq "$RRASserverName") -ScriptBlock $script -ArgumentList $SelectedUser                             
                        }

                        Foreach ($Row in $var)
                        {                      
                            $ServerIpAddress = $Row | Select -ExpandProperty ServerIpAddress                   
                            $ProtocolID = $Row | Select -ExpandProperty ProtocolID                 
                            $ServerPort = $Row | Select -ExpandProperty ServerPort                                             

                            $DGVResults.Rows.Add($RRASserverName, $SelectedUser, $ServerIpAddress, $ProtocolID, $ServerPort)                       
                        }
                        Write-OutputBox -OutputBoxMessage "Successfully collected data from $RRASserver" -Type INFO
                        [System.Windows.Forms.Application]::DoEvents()
                    }
                    else
                    {
                        Write-OutputBox -OutputBoxMessage "No data was found" -Type INFO
                    }                    
                       
                    Update-StatusBar -Activity Ready -Text " "
                    Write-OutputBox -OutputBoxMessage "Completed collecting RRAS Remote Access Health data" -Type INFO            
                }
            }
        }
    }
   
    function RefreshDataGRidView
    {
        $DGVResults.Rows.Clear()        
        if ($ComboBoxTypes.SelectedItem -eq "General Information") {
            $DGVResults.Columns.Clear()
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "VpnStatus"
            $DGVResults.Columns[1].Width = "200"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "Routing Status"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "Internet Interface"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true
            $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[4].Name = "Internal Interface"
            $DGVResults.Columns[4].AutoSizeMode = "Fill"
            $DGVResults.Columns[4].ReadOnly = $true
            $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[5].Name = "IP Assignment Method"
            $DGVResults.Columns[5].AutoSizeMode = "Fill"
            $DGVResults.Columns[5].ReadOnly = $true
            $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[6].Name = "IP Address Range List"
            $DGVResults.Columns[6].AutoSizeMode = "Fill"
            $DGVResults.Columns[6].ReadOnly = $true
            $DGVResults.Columns.Insert(7,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[7].Name = "Authentication Type"
            $DGVResults.Columns[7].AutoSizeMode = "Fill"
            $DGVResults.Columns[7].ReadOnly = $true
            $DGVResults.Columns.Insert(8,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[8].Name = "Radius Server List"
            $DGVResults.Columns[8].AutoSizeMode = "Fill"
            $DGVResults.Columns[8].ReadOnly = $true
        }
        Elseif ($ComboBoxTypes.SelectedItem -eq "Accounting")
        {                
            $DGVResults.Columns.Clear()                                    
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "Inbox Status"
            $DGVResults.Columns[1].AutoSizeMode = "Fill"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "Inbox Limit"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "Inbox UsedBytes (GB)"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true
            $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[4].Name = "UsedBytes (%)"
            $DGVResults.Columns[4].AutoSizeMode = "Fill"
            $DGVResults.Columns[4].ReadOnly = $true
            $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[5].Name = "FreeBytes (GB)"
            $DGVResults.Columns[5].AutoSizeMode = "Fill"
            $DGVResults.Columns[5].ReadOnly = $true
            $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[6].Name = "FreeBytes (%)"
            $DGVResults.Columns[6].AutoSizeMode = "Fill"
            $DGVResults.Columns[6].ReadOnly = $true
            $DGVResults.Columns.Insert(7,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[7].Name = "FirstRecordDate"
            $DGVResults.Columns[7].AutoSizeMode = "Fill"
            $DGVResults.Columns[7].ReadOnly = $true
            $DGVResults.Columns.Insert(8,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[8].Name = "LastRecordDate"
            $DGVResults.Columns[8].AutoSizeMode = "Fill"
            $DGVResults.Columns[8].ReadOnly = $true
        }
        Elseif ($ComboBoxTypes.SelectedItem -eq "Connection Statistics")
        {          
            $DGVResults.Columns.Clear()                                    
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "Username"
            $DGVResults.Columns[1].AutoSizeMode = "Fill"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "Client IPAddress"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "Client ExternalAddress"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true
            $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[4].Name = "AuthMethod"
            $DGVResults.Columns[4].AutoSizeMode = "Fill"
            $DGVResults.Columns[4].ReadOnly = $true
            $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[5].Name = "Tunnel Type"
            $DGVResults.Columns[5].AutoSizeMode = "Fill"
            $DGVResults.Columns[5].ReadOnly = $true
            $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[6].Name = "Connection StartTime"
            $DGVResults.Columns[6].AutoSizeMode = "Fill"
            $DGVResults.Columns[6].ReadOnly = $true
            $DGVResults.Columns.Insert(7,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[7].Name = "Connection Duration"
            $DGVResults.Columns[7].AutoSizeMode = "Fill"
            $DGVResults.Columns[7].ReadOnly = $true
            $DGVResults.Columns.Insert(8,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[8].Name = "User ActivityState"
            $DGVResults.Columns[8].AutoSizeMode = "Fill"
            $DGVResults.Columns[8].ReadOnly = $true
            #TotalBytesIn
            #TotalBytesOut
        }
        Elseif ($ComboBoxTypes.SelectedItem -eq "Connection Statistics Summary")
        {                
            if ($CheckBoxCurrentData.Checked -eq $true)
            {
                $DGVResults.Columns.Clear()                                    
                $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[0].Name = "RRAS Server"
                $DGVResults.Columns[0].AutoSizeMode = "Fill"
                $DGVResults.Columns[0].ReadOnly = $true
                $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[1].Name = "Total VPN Connections"
                $DGVResults.Columns[1].AutoSizeMode = "Fill"
                $DGVResults.Columns[1].ReadOnly = $true
                $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[2].Name = "Total Unique Users"
                $DGVResults.Columns[2].AutoSizeMode = "Fill"
                $DGVResults.Columns[2].ReadOnly = $true
                $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[3].Name = "Max Concurrent Connections"
                $DGVResults.Columns[3].AutoSizeMode = "Fill"
                $DGVResults.Columns[3].ReadOnly = $true
                $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[4].Name = "Total Cumulative Connections"
                $DGVResults.Columns[4].AutoSizeMode = "Fill"
                $DGVResults.Columns[4].ReadOnly = $true
                $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[5].Name = "Total BytesIn (GB)"
                $DGVResults.Columns[5].AutoSizeMode = "Fill"
                $DGVResults.Columns[5].ReadOnly = $true
                $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[6].Name = "Total BytesOut (GB)"
                $DGVResults.Columns[6].AutoSizeMode = "Fill"
                $DGVResults.Columns[6].ReadOnly = $true
            }
            Else
            {  
                $DGVResults.Columns.Clear()                                    
                $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[0].Name = "RRAS Server"
                $DGVResults.Columns[0].AutoSizeMode = "Fill"
                $DGVResults.Columns[0].ReadOnly = $true
                $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[1].Name = "Total Sessions"
                $DGVResults.Columns[1].AutoSizeMode = "Fill"
                $DGVResults.Columns[1].ReadOnly = $true
                $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[2].Name = "Total Vpn Sessions"
                $DGVResults.Columns[2].AutoSizeMode = "Fill"
                $DGVResults.Columns[2].ReadOnly = $true
                $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[3].Name = "Max Concurrent Sessions"
                $DGVResults.Columns[3].AutoSizeMode = "Fill"
                $DGVResults.Columns[3].ReadOnly = $true
                $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[4].Name = "Average SessionsPerDay"
                $DGVResults.Columns[4].AutoSizeMode = "Fill"
                $DGVResults.Columns[4].ReadOnly = $true
                $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
                $DGVResults.Columns[5].Name = "Total UniqueUsers"
                $DGVResults.Columns[5].AutoSizeMode = "Fill"
                $DGVResults.Columns[5].ReadOnly = $true
            }
        }
        Elseif ($ComboBoxTypes.SelectedItem -eq "Health")
        {                
            $DGVResults.Columns.Clear()                                    
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "Component"
            $DGVResults.Columns[1].AutoSizeMode = "Fill"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "Health State"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "Timestamp"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true            
        }      
        Elseif ($ComboBoxTypes.SelectedItem -eq "RemoteAccessRadius")
        {            
            $DGVResults.Columns.Clear()                                    
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "ServerName"
            $DGVResults.Columns[1].AutoSizeMode = "Fill"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "Purpose"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "Score"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true
            $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[4].Name = "Timeout"
            $DGVResults.Columns[4].AutoSizeMode = "Fill"
            $DGVResults.Columns[4].ReadOnly = $true
            $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[5].Name = "Port"
            $DGVResults.Columns[5].AutoSizeMode = "Fill"
            $DGVResults.Columns[5].ReadOnly = $true
            $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[6].Name = "AccountingOnOffMsg"
            $DGVResults.Columns[6].AutoSizeMode = "Fill"
            $DGVResults.Columns[6].ReadOnly = $true
            $DGVResults.Columns.Insert(7,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[7].Name = "MsgAuthenticator"
            $DGVResults.Columns[7].AutoSizeMode = "Fill"
            $DGVResults.Columns[7].ReadOnly = $true
        }
        Elseif ($ComboBoxTypes.SelectedItem -eq "User Activity")
        {                
            $DGVResults.Columns.Clear()                                    
            $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[0].Name = "RRAS Server"
            $DGVResults.Columns[0].AutoSizeMode = "Fill"
            $DGVResults.Columns[0].ReadOnly = $true
            $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[1].Name = "UserName"
            $DGVResults.Columns[1].AutoSizeMode = "Fill"
            $DGVResults.Columns[1].ReadOnly = $true
            $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[2].Name = "ServerIpAddress"
            $DGVResults.Columns[2].AutoSizeMode = "Fill"
            $DGVResults.Columns[2].ReadOnly = $true
            $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[3].Name = "ProtocolID"
            $DGVResults.Columns[3].AutoSizeMode = "Fill"
            $DGVResults.Columns[3].ReadOnly = $true
            $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
            $DGVResults.Columns[4].Name = "ServerPort"
            $DGVResults.Columns[4].AutoSizeMode = "Fill"
            $DGVResults.Columns[4].ReadOnly = $true
        }
    }

    function SaveConfiguration($DGVConfigResultsData)
    {
        #Check File and Create if required
        if (Test-path -Path $ConfigurationFile)
        {
            Write-OutputConfigBox -OutputBoxMessage "Configuration File found, Initiating clean up procedure" -Type INFO
            Remove-Item -Path $ConfigurationFile -Force        
            New-Item -path $ConfigurationFile -ItemType File
        }
        Else
        {
            Write-OutputConfigBox -OutputBoxMessage "Configuration File not found, creating file as required: $ConfigurationFile" -Type INFO
            New-Item -path $ConfigurationFile -ItemType File
        }
       
        # Save Information to Configuration File       
        $Row = 0       
        For ($Row =0; $row -lt $DGVConfigResultsData.Rowcount -1 ; $Row++)
        {
            $RRASHostname = ""
            $RRASUsername = ""                             
            $RRASHostname = $DGVConfigResultsData.Rows[$row].Cells[0].Value
            $RRASUsername = $DGVConfigResultsData.Rows[$row].Cells[1].Value
            #$RRASPassword = (Decrypt-String -Encrypted ($DGVConfigResults[2,$DGVConfigResults.CurrentCell.RowIndex].Value))
            $RRASPassword = (Decrypt-String -Encrypted ($DGVConfigResultsData.Rows[$row].Cells[2].Value))
           
            #Save RRAS hostname and Username in the Configuraiton File
            Add-Content -Path $ConfigurationFile -Value "$RRASHostname,$RRASUsername"
           
            # Encrytping password
            $RRASPassword | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "$UserLocalAppData\RRASreporting\$RRASHostname.txt"           
           
            Write-OutputConfigBox -OutputBoxMessage "Data saved in Configuration File: $ConfigurationFile" -Type INFO  
            $Global:ConfigurationUploaded = "Success"
        }
    }
   
    function LoadConfiguration
    {
        Process
        {
            #Check File and Create if required
            if (Test-path -Path $ConfigurationFile)
            {
                Write-OutputConfigBox -OutputBoxMessage "Configuration File found, Loading information" -Type INFO

                # Load information
                ForEach ($RRASserver in (Get-content -path $configurationfile))
                {
                    $RRASServerDetails = $RRASserver.Split(",")
                    $RRASServerName = $RRASServerDetails[0]
                    $RRASUserName = $RRASserverDetails[1]                  
                   
                    $RRASDecryptedPassword = ConvertFrom-SecureToPlain (Get-Content -Path "$UserLocalAppData\RRASreporting\$RRASServerName.txt" | ConvertTo-SecureString)
                    Update-StatusBar -Activity Validating -Text "Fetching login details from $UserLocalAppData\RRASreporting\$RRASServerName.txt"
                    Write-OutputConfigBox -OutputBoxMessage "Fetching login details from $UserLocalAppData\RRASreporting\$RRASServerName.txt" -Type INFO                   
                   
                    Update-StatusBar -Activity Enumerating -Text " "                
                    Update-StatusBar -Activity Validating -Text "Adding Server to the RRAS Server List"
                                   
                    $EncryptedPassword = (Encrypt-String -String ($RRASDecryptedPassword))     
                                       
                    $DGVConfigResults.Rows.Add($RRASServerName, $RRASUserName, $EncryptedPassword)
                   
                    Update-StatusBar -Activity Ready -Text " "
                    Write-OutputConfigBox -OutputBoxMessage "Successfully added data to Grid view" -Type INFO                  
                }
            }
        }
    }
           
    function Export-DGV2CSV ([Windows.Forms.DataGridView] $grid, [String] $File)
    <#
    .SYNOPSIS
    Export basic datagrid to CSV file

    .PARAMETER grid
    Datagrid object
    .PARAMETER file
    Path to CSV file
    #>
    {
        if ($grid.RowCount -eq 0) { return } # nothing to do

        $row = New-Object Windows.Forms.DataGridViewRow
        $sw  = new-object System.IO.StreamWriter($File)

        Try
        {
            #Write header line
            $sw.WriteLine( ($grid.Columns | % { $_.HeaderText } ) -join ',' )

            Update-StatusBar -Activity Validating -Text "Fetching data from Datagrid to Export"
            Write-OutputBox -OutputBoxMessage "Fetching data from Datagrid to Export" -Type INFO                   
           
            #Export contents inlcuding Headers
            $grid.Rows | % {
            $sw.WriteLine(
            ($_.Cells | % { $_.Value }) -join ','
            )
            }
            $sw.Close()
           
            Write-OutputBox -OutputBoxMessage "Data Exported to $ExportFile successfully" -Type INFO                   
            Update-StatusBar -Activity Ready -Text " "                         
        }
        Catch
        {
            Write-OutputBox -OutputBoxMessage "Issues while exporting datagridview: $_.Exception.Message" -Type ERROR                  
        }
    }

   
    function Encrypt-String($String, $Passphrase="EncryptIt", $salt="SaltCrypto", $init="PassKeeper", [switch]$arrayOutput)
    {
        # Info: More information and good documentation on these functions can be found in the link above
        $r = New-Object System.Security.Cryptography.RijndaelManaged
        $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)
        $salt = [Text.Encoding]::UTF8.GetBytes($salt)
        $r.Key = (New-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32)
        $r.IV = (New-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15]
        $c = $r.CreateEncryptor()
        $ms = New-Object IO.MemoryStream
        $cs = New-Object Security.Cryptography.CryptoStream $ms,$c,"Write"
        $sw = New-Object IO.StreamWriter $cs
        $sw.Write($String)
        $sw.Close()
        $cs.Close()
        $ms.Close()
        $r.Clear()
        [byte[]]$result = $ms.ToArray()
        return [Convert]::ToBase64String($result)
    }
     
    function Decrypt-String($Encrypted, $Passphrase="EncryptIt", $salt="SaltCrypto", $init="PassKeeper")
    {
        if($Encrypted -is [string])
        {
            $Encrypted = [Convert]::FromBase64String($Encrypted)
        }
     
        $r = New-Object System.Security.Cryptography.RijndaelManaged
        $pass = [Text.Encoding]::UTF8.GetBytes($Passphrase)
        $salt = [Text.Encoding]::UTF8.GetBytes($salt)
        $r.Key = (New-Object Security.Cryptography.PasswordDeriveBytes $pass, $salt, "SHA1", 5).GetBytes(32) #256/8
        $r.IV = (New-Object Security.Cryptography.SHA1Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($init) )[0..15]
        $d = $r.CreateDecryptor()
        $ms = New-Object IO.MemoryStream @(,$Encrypted)
        $cs = New-Object Security.Cryptography.CryptoStream $ms,$d,"Read"
        $sr = New-Object IO.StreamReader $cs
        $text = $sr.ReadToEnd()
        $sr.Close()
        $cs.Close()
        $ms.Close()
        $r.Clear()
        return $text
    }
   
    # A Generic Function for Converting Security.SecureString Objects to Plain Text Strings
    Function ConvertFrom-SecureToPlain
    {
        param( [Parameter(Mandatory=$true)][System.Security.SecureString] $SecurePassword)
       
        # Create a "password pointer"
        $PasswordPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)      

        # Get the plain text version of the password
        $PlainTextPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto($PasswordPointer)      

        # Free the pointer
        [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($PasswordPointer)      

        # Return the plain text password
        $PlainTextPassword
    }

   
    function RemoveRRASServertoGridView
    {        
        Process
        {            
            Update-StatusBar -Activity Enumerating -Text " "                
            Update-StatusBar -Activity Validating -Text "Adding Server to the RRAS Server List"
           
            $DGVConfigResults.Rows.Remove($DGVConfigResults.Rows[$DGVConfigResults.CurrentCell.RowIndex])
           
            Update-StatusBar -Activity Ready -Text " "
            Write-OutputBox -OutputBoxMessage "Successfully added data to Grid view" -Type INFO                                
        }
    }
   
    function AddRRASServertoGridView
    {        
        Process
        {            
            Update-StatusBar -Activity Enumerating -Text " "                
            Update-StatusBar -Activity Validating -Text "Adding Server to the RRAS Server List"
           
            # Encrytping password
            $EncryptedString = (Encrypt-String -String ($TextBoxRRASPassword.Text))    
           
            $DGVConfigResults.Rows.Add($TextBoxRRASServer.Text, $TextBoxRRASUsername.Text, $EncryptedString)                                           
            Update-StatusBar -Activity Ready -Text " "
            Write-OutputConfigBox -OutputBoxMessage "Successfully added data to Grid view" -Type INFO                                
        }
    }

#endregion Functions

#region Windows Form Settings

    #region Form Details
        # Forms
        $Form = New-Object System.Windows.Forms.Form    
        #$Form.Size = New-Object System.Drawing.Size(900,700)  
        $Form.Size = New-Object System.Drawing.Size(1200,700)  
        $Form.MinimumSize = New-Object System.Drawing.Size(1200,700)
        $Form.MaximumSize = New-Object System.Drawing.Size([System.Int32]::MaxValue,[System.Int32]::MaxValue)
        $Form.SizeGripStyle = "Show"
        $Form.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($PSHome + "\powershell.exe")
        $Form.Text = "Harmik Batth - RRAS Server Stats v1.0"
        $Form.ControlBox = $true
        $Form.MinimizeBox=$true
        $Form.MaximizeBox=$true
        $Form.TopMost = $false 

    #endregion Form Details
   
    #region Execution Form page
        # Buttons
       
        $ButtonExecute = New-Object System.Windows.Forms.Button
        $ButtonExecute.Location = New-Object System.Drawing.Size(790,27)
        $ButtonExecute.Size = New-Object System.Drawing.Size(90,25)
        $ButtonExecute.Text = "Execute"
        $ButtonExecute.TabIndex = "5"
        $ButtonExecute.Anchor = "Top, Left"
        $ButtonExecute.Enabled = $true
        $ButtonExecute.Add_Click({        
            switch ($ComboBoxTypes.SelectedItem)
            {
                "General Information"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RRASGeneralInformation
                        Activate-Controls
                    }
                }
                "Accounting"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RemoteAccessAccounting
                        Activate-Controls
                    }
                }
                "Connection Statistics"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RemoteAccessConnectionStatistics
                        Activate-Controls
                    }
                }
                "Connection Statistics Summary"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RRASConnectionStatisticsSummary
                        Activate-Controls
                    }
                }
                "Health"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RemoteAccessHealth
                        Activate-Controls
                    }
                }
                "RemoteAccessRadius"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RemoteAccessRadius
                        Activate-Controls
                    }
                }
                "User Activity"
                {
                    Invoke-CleanControls -Option All
                    if ($RadioButtonSelectRRASServer.Checked -eq $true)
                    {
                        DeActivate-Controls
                        RefreshDataGridView
                        Get-RemoteAccessUserActivity
                        Activate-Controls
                    }
                }
            }    
        })
       
        $ButtonConfiguration = New-Object System.Windows.Forms.Button
        $ButtonConfiguration.Location = New-Object System.Drawing.Size(910,27)
        $ButtonConfiguration.Size = New-Object System.Drawing.Size(90,25)
        $ButtonConfiguration.Text = "Configuration"
        $ButtonConfiguration.TabIndex = "6"
        $ButtonConfiguration.Anchor = "Top, Left"
        $ButtonConfiguration.Enabled = $true
        $ButtonConfiguration.Add_Click({               
            LoadConfigurationForm
        })
       
        $ButtonExport = New-Object System.Windows.Forms.Button
        $ButtonExport.Location = New-Object System.Drawing.Size(790,57)
        $ButtonExport.Size = New-Object System.Drawing.Size(90,25)
        $ButtonExport.Text = "Export"
        $ButtonExport.TabIndex = "7"
        $ButtonExport.Anchor = "Top, Left"
        $ButtonExport.Enabled = $true
        $ButtonExport.Add_Click({              
            $strDate = Get-Date -Format "dd-MM-yyyy"
            switch ($ComboBoxTypes.SelectedItem)
            {
                "General Information"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-General-Information-$strDate.csv"
                }
                "Accounting"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-Accounting-$strDate.csv"
                }
                "Connection Statistics"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-Connection-Statistics-$strDate.csv"
                }
                "Connection Statistics Summary"
                {
                    if ($CheckBoxCurrentData.Checked -$true)
                    {
                        $ExportFile = $ExportFile = "$ExportFolder\RRAS-Connection-Statistics-Summary-Current-$strDate.csv"
                    }
                    Else
                    {
                        $ExportFile = $ExportFile = "$ExportFolder\RRAS-Connection-Statistics-Summary-Custom-$strDate.csv"
                    }
                }
                "Health"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-Health-$strDate.csv"
                }
                "RemoteAccessRadius"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-Radius-$strDate.csv"
                }
                "User Activity"
                {
                    $ExportFile = $ExportFile = "$ExportFolder\RRAS-User-Activity-$strDate.csv"
                }
            }
            Export-DGV2CSV $DGVResults $ExportFile
        })
       
        # GroupBoxes
        $GBRRASServersSelect = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBRRASServersSelect.Location = New-Object -TypeName System.Drawing.Size(10,10)
        $GBRRASServersSelect.Size = New-Object -TypeName System.Drawing.Size(120,50)
        $GBRRASServersSelect.Anchor = "Top, Left"
        $GBRRASServersSelect.Text = "RRAS Servers List"
       
        $GBOptions = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBOptions.Location = New-Object -TypeName System.Drawing.Size(140,10)
        $GBOptions.Size = New-Object -TypeName System.Drawing.Size(630,80)
        $GBOptions.Anchor = "Top, Left"
        $GBOptions.Text = "Options"
       
        $GBUser = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBUser.Location = New-Object -TypeName System.Drawing.Size(540,30)
        $GBUser.Size = New-Object -TypeName System.Drawing.Size(220,50)
        $GBUser.Anchor = "Top, Left"
        $GBUser.Text = "Enter Username to Report on"
       
        $GBActions = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBActions.Location = New-Object -TypeName System.Drawing.Size(780,10)
        $GBActions.Size = New-Object -TypeName System.Drawing.Size(110,90)
        $GBActions.Anchor = "Top, Left"
        $GBActions.Text = "Actions"
       
        $GBSettings = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBSettings.Location = New-Object -TypeName System.Drawing.Size(900,10)
        $GBSettings.Size = New-Object -TypeName System.Drawing.Size(110,50)
        $GBSettings.Anchor = "Top, Left"
        $GBSettings.Text = "Settings"
       
        $GBResults = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBResults.Location = New-Object -TypeName System.Drawing.Size(10,100)
        $GBResults.Size = New-Object -TypeName System.Drawing.Size(1160,350)
        $GBResults.Anchor = "Top, Bottom, Left, Right"
        $GBResults.Text = "Source information"
       
        $GBLog = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBLog.Location = New-Object -TypeName System.Drawing.Size(10,455)
        $GBLog.Size = New-Object -TypeName System.Drawing.Size(1160,175)
        $GBLog.Anchor = "Bottom, Left, Right"
        $GBLog.Text = "Logging"

        # ComboBoxes
        $ComboBoxTypes = New-Object System.Windows.Forms.ComboBox
        $ComboBoxTypes.Location = New-Object System.Drawing.Size(150,30)
        $ComboBoxTypes.Size = New-Object System.Drawing.Size(160,30)
        $ComboBoxTypes.Items.AddRange(@("General Information","Accounting","Connection Statistics","Connection Statistics Summary","Health","RemoteAccessRadius","User Activity"))
        $ComboBoxTypes.SelectedItem = "General Information"
        $ComboBoxTypes.TabIndex = "1"
        $ComboBoxTypes.Anchor = "Top, Left"
        $ComboBoxTypes.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList    
        $ComboBoxTypes.Add_SelectedIndexChanged({
            Activate-DateControls
        })
       
        #Checkboxes
        $CheckBoxCurrentData = New-Object System.Windows.Forms.CheckBox
        $CheckBoxCurrentData.Location = New-Object System.Drawing.Size(150,55)
        $CheckBoxCurrentData.Size = New-Object System.Drawing.Size(160,30) 
        $CheckBoxCurrentData.Anchor = "Top, Left"  
        $CheckBoxCurrentData.Text = "Show Current Data"
        $CheckBoxCurrentData.Enabled = $false
        $CheckBoxCurrentData.Checked = $true   
        $CheckBoxCurrentData.Add_CheckedChanged({
            Activate-CheckBoxControls
        })
       
        # Date Time Boxes
        $DateTimeStart= New-Object System.Windows.Forms.DateTimePicker 
        $DateTimeStart.Location = New-Object System.Drawing.Size(380,30)
        $DateTimeStart.Size = New-Object System.Drawing.Size(150,20)
        $DateTimeStart.Format = [System.Windows.Forms.DateTimePickerFormat]::Custom
        $DateTimeStart.CustomFormat = "dd-MM-yyyy hh:mm:ss tt"     
        $DateTimeStart.Value = ([DateTime]::Today).AddDays(-1) 
        $DateTimeStart.MaxDate = Get-Date  
        $DateTimeStart.Anchor = "Top, Left"
        $DateTimeStart.Enabled = $false
        $DateTimeStart.TabIndex = "2"
       
        $DateTimeEnd= New-Object System.Windows.Forms.DateTimePicker   
        $DateTimeEnd.Location = New-Object System.Drawing.Size(380,60)  
        $DateTimeEnd.Size = New-Object System.Drawing.Size(150,20)
        $DateTimeEnd.Format = [System.Windows.Forms.DateTimePickerFormat]::Custom
        $DateTimeEnd.CustomFormat = "dd-MM-yyyy hh:mm:ss tt"
        $DateTimeEnd.Value = [DateTime]::Today
        $DateTimeEnd.MaxDate = Get-Date
        $DateTimeEnd.Anchor = "Top, Left"
        $DateTimeEnd.Enabled = $false
        $DateTimeEnd.TabIndex = "3"
       
        # Lables
        $LabelDateStart = New-Object System.Windows.Forms.Label
        $LabelDateStart.Location = New-Object System.Drawing.Size(320,33)
        $LabelDateStart.Size = New-Object System.Drawing.Size(60,20)   
        $LabelDateStart.Anchor = "Top, Left"   
        $LabelDateStart.Text = "Start Date"
       
        $LabelDateEnd = New-Object System.Windows.Forms.Label
        $LabelDateEnd.Location = New-Object System.Drawing.Size(320,63)
        $LabelDateEnd.Size = New-Object System.Drawing.Size(60,20) 
        $LabelDateEnd.Anchor = "Top, Left" 
        $LabelDateEnd.Text = "End Date"
       
        $LabelUserName = New-Object System.Windows.Forms.Label
        $LabelUserName.Location = New-Object System.Drawing.Size(550,33)
        $LabelUserName.Size = New-Object System.Drawing.Size(100,20)   
        $LabelUserName.Anchor = "Top, Left"
        $LabelUserName.Text = "Enter Username"
       
        # Radio Buttons    
        $RadioButtonSelectRRASServer = New-Object System.Windows.Forms.RadioButton
        $RadioButtonSelectRRASServer.Location = New-Object System.Drawing.Size(20,30)
        $RadioButtonSelectRRASServer.Size = New-Object System.Drawing.Size(70,15)
        $RadioButtonSelectRRASServer.TabIndex = "0"
        $RadioButtonSelectRRASServer.Anchor = "Top, Left"
        $RadioButtonSelectRRASServer.Text = "All RRAS Servers"
        $RadioButtonSelectRRASServer.Checked = $true

        # RichTextBox
        $OutputBox = New-Object System.Windows.Forms.RichTextBox
        $OutputBox.Location = New-Object System.Drawing.Size(20,475)
        $OutputBox.Size = New-Object System.Drawing.Size(1138,145)
        $OutputBox.Anchor = "Bottom, Left, Right"
        $OutputBox.TabIndex = "9"
        $OutputBox.Font = "Courier New"
        $OutputBox.BackColor = "white"
        $OutputBox.ReadOnly = $true
        $OutputBox.MultiLine = $true
       
        $TextBoxUserName = New-Object System.Windows.Forms.RichTextBox
        $TextBoxUserName.Location = New-Object System.Drawing.Size(550,50)
        $TextBoxUserName.Size = New-Object System.Drawing.Size(200,20)
        $TextBoxUserName.Anchor = "Top, Left"
        $TextBoxUserName.TabIndex = "4"
        $TextBoxUserName.Font = "Courier New"
        $TextBoxUserName.BackColor = "white"
        $TextBoxUserName.ReadOnly = $false
        $TextBoxUserName.MultiLine = $false
        $TextBoxUserName.Enabled = $false
        $TextBoxUserName.Text = "Enter UserName or DeviceName"
        $TextBoxUserName.add_GotFocus({
            ModifyTextbox
        })
        $TextBoxUserName.add_LostFocus({
            ModifyTextbox
        }) 

        # StatusBar
        $StatusBarPanelActivity = New-Object Windows.Forms.StatusBarPanel
        $StatusBarPanelActivity.Text = "Ready"
        $StatusBarPanelActivity.Width = "100"
        $StatusBarPanelProcessing = New-Object Windows.Forms.StatusBarPanel
        $StatusBarPanelProcessing.Text = ""
        $StatusBarPanelProcessing.Width = "770"
        $StatusBarPanelAuthor = New-Object Windows.Forms.StatusBarPanel
        $StatusBarPanelAuthor.Text = "Author: Harmik Singh Batth"
        $StatusBarPanelAuthor.Width = "150"
        $StatusBarPanelAuthorWesbite = New-Object Windows.Forms.StatusBarPanel
        $StatusBarPanelAuthorWesbite.Text = "Website: www.harmikbatth.com"
        $StatusBarPanelAuthorWesbite.AutoSize = "Spring"
        #$StatusBarPanelProcessing.Style = [System.Drawing.Color]::Red - need to fix color
        $StatusBar = New-Object Windows.Forms.StatusBar
        $StatusBar.Size = New-Object System.Drawing.Size(500,20)
        $StatusBar.ShowPanels = $true
        $StatusBar.SizingGrip = $false
        $StatusBar.AutoSize = "Full"
        $StatusBar.Panels.AddRange(@(
            $StatusBarPanelActivity,
            $StatusBarPanelProcessing,
            $StatusBarPanelAuthor,
            $StatusBarPanelAuthorWesbite
        ))
       
        #Tooltip Progress bar
        $TooltipProgressBar = New-Object Windows.Forms.ToolStripProgressBar
       
        # DataGridViews
        $DGVResults = New-Object System.Windows.Forms.DataGridView
        $DGVResults.Location = New-Object System.Drawing.Size(20,120)
        $DGVResults.Size = New-Object System.Drawing.Size(1138,320)
        $DGVResults.Anchor = "Top, Bottom, Left, Right"
        $DGVResults.TabIndex = "8"
        $DGVResults.ColumnHeadersVisible = $true
        $DGVResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[0].Name = "RRAS Server"
        $DGVResults.Columns[0].AutoSizeMode = "Fill"
        $DGVResults.Columns[0].ReadOnly = $true
        $DGVResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[1].Name = "VpnStatus"
        $DGVResults.Columns[1].Width = "200"
        $DGVResults.Columns[1].ReadOnly = $true
        $DGVResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[2].Name = "RoutingStatus"
        $DGVResults.Columns[2].AutoSizeMode = "Fill"
        $DGVResults.Columns[2].ReadOnly = $true
        $DGVResults.Columns.Insert(3,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[3].Name = "Internet Interface"
        $DGVResults.Columns[3].AutoSizeMode = "Fill"
        $DGVResults.Columns[3].ReadOnly = $true
        $DGVResults.Columns.Insert(4,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[4].Name = "Internal Interface"
        $DGVResults.Columns[4].AutoSizeMode = "Fill"
        $DGVResults.Columns[4].ReadOnly = $true
        $DGVResults.Columns.Insert(5,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[5].Name = "IPAssignmentMethod"
        $DGVResults.Columns[5].AutoSizeMode = "Fill"
        $DGVResults.Columns[5].ReadOnly = $true
        $DGVResults.Columns.Insert(6,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[6].Name = "IPAddressRangeList"
        $DGVResults.Columns[6].AutoSizeMode = "Fill"
        $DGVResults.Columns[6].ReadOnly = $true
        $DGVResults.Columns.Insert(7,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[7].Name = "AuthenticationType"
        $DGVResults.Columns[7].AutoSizeMode = "Fill"
        $DGVResults.Columns[7].ReadOnly = $true
        $DGVResults.Columns.Insert(8,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVResults.Columns[8].Name = "RadiusServerList"
        $DGVResults.Columns[8].AutoSizeMode = "Fill"
        $DGVResults.Columns[8].ReadOnly = $true
        $DGVResults.AllowUserToAddRows = $false
        $DGVResults.AllowUserToDeleteRows = $false
        $DGVResults.ReadOnly = $false
        $DGVResults.MultiSelect = $true
        $DGVResults.ColumnHeadersHeightSizeMode = "DisableResizing"
        $DGVResults.RowHeadersWidthSizeMode = "DisableResizing"
        $DGVResults.RowHeadersVisible = $false
        $DGVResults.SelectionMode = "FullRowSelect"
   
    #endregion Execution Form page

    #region Configuration Form page
        #------------------Configuration Form--------------------------#       

        # GroupBoxes
        $GBConfigActions = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBConfigActions.Location = New-Object -TypeName System.Drawing.Size(400,10)
        $GBConfigActions.Size = New-Object -TypeName System.Drawing.Size(270,120)
        $GBConfigActions.Anchor = "Top, Left"
        $GBConfigActions.Text = "Actions"
       
        $GBConfigResults = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBConfigResults.Location = New-Object -TypeName System.Drawing.Size(10,170)
        $GBConfigResults.Size = New-Object -TypeName System.Drawing.Size(860,280)
        $GBConfigResults.Anchor = "Top, Bottom, Left, Right"
        $GBConfigResults.Text = "Configure RRAS Server Details"

        $GBConfigLog = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBConfigLog.Location = New-Object -TypeName System.Drawing.Size(10,455)
        $GBConfigLog.Size = New-Object -TypeName System.Drawing.Size(860,175)
        $GBConfigLog.Anchor = "Bottom, Left, Right"
        $GBConfigLog.Text = "Logging"
       
        $GBConfigRRAS = New-Object -TypeName System.Windows.Forms.GroupBox
        $GBConfigRRAS.Location = New-Object -TypeName System.Drawing.Size(10,10)
        $GBConfigRRAS.Size = New-Object -TypeName System.Drawing.Size(380,120)
        $GBConfigRRAS.Anchor = "Top, Left"
        $GBConfigRRAS.Text = "Provide RRAS Server Details" 

        # DataGridViews
        $DGVConfigResults = New-Object System.Windows.Forms.DataGridView
        $DGVConfigResults.Location = New-Object System.Drawing.Size(20,190)
        $DGVConfigResults.Size = New-Object System.Drawing.Size(838,250)
        $DGVConfigResults.Anchor = "Top, Bottom, Left, Right"
        $DGVConfigResults.ColumnHeadersVisible = $true
        $DGVConfigResults.Columns.Insert(0,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVConfigResults.Columns[0].Name = "RRAS Server Name"
        $DGVConfigResults.Columns[0].Width = "200"
        $DGVConfigResults.Columns[0].ReadOnly = $false
        $DGVConfigResults.Columns.Insert(1,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVConfigResults.Columns[1].Name = "Username"
        $DGVConfigResults.Columns[1].AutoSizeMode = "Fill"
        $DGVConfigResults.Columns[1].ReadOnly = $false
        $DGVConfigResults.Columns.Insert(2,(New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn))
        $DGVConfigResults.Columns[2].Name = "Password"
        $DGVConfigResults.Columns[2].AutoSizeMode = "Fill"
        $DGVConfigResults.Columns[2].ReadOnly = $false
       
        $DGVConfigResults.AllowUserToAddRows = $true
        $DGVConfigResults.AllowUserToDeleteRows = $true
        $DGVConfigResults.ReadOnly = $true
        $DGVConfigResults.MultiSelect = $true
        $DGVConfigResults.ColumnHeadersHeightSizeMode = "DisableResizing"
        $DGVConfigResults.RowHeadersWidthSizeMode = "DisableResizing"
        $DGVConfigResults.RowHeadersVisible = $true
        $DGVConfigResults.SelectionMode = "FullRowSelect"
        #$DGVConfigResults.TabIndex = 0

        # Buttons
        $ButtonConfigExecute = New-Object System.Windows.Forms.Button
        $ButtonConfigExecute.Location = New-Object System.Drawing.Size(540,30)
        $ButtonConfigExecute.Size = New-Object System.Drawing.Size(120,30)
        $ButtonConfigExecute.Text = "Save Configuration"
        $ButtonConfigExecute.TabIndex = "1"
        $ButtonConfigExecute.Anchor = "Top, Left"
        $ButtonConfigExecute.Enabled = $true
        $ButtonConfigExecute.Add_Click({        
            if ($DGVConfigResults.RowCount -ge 1)
            {
                SaveConfiguration $DGVConfigResults
            }
        })
       
        $ButtonConfigRRASAdd = New-Object System.Windows.Forms.Button
        $ButtonConfigRRASAdd.Location = New-Object System.Drawing.Size(410,30)
        $ButtonConfigRRASAdd.Size = New-Object System.Drawing.Size(120,30)
        $ButtonConfigRRASAdd.Text = "Add Server"
        $ButtonConfigRRASAdd.TabIndex = "1"
        $ButtonConfigRRASAdd.Anchor = "Top, Left"
        $ButtonConfigRRASAdd.Enabled = $true
        $ButtonConfigRRASAdd.Add_Click({        
            $preReqs = ""
            if (($TextBoxRRASServer.Text -eq $null) -or ($TextBoxRRASServer.Text -eq ""))
            {
                Write-OutputConfigBox -OutputBoxMessage "Server name cannot be empty" -Type WARNING
                Update-StatusBar -Activity Validating -Text "Server name cannot be empty"          
                $preReqs = "Not Met"
            }
            if (($TextBoxRRASUsername.Text -eq $null) -or ($TextBoxRRASUsername.Text -eq ""))
            {
                Write-OutputConfigBox -OutputBoxMessage "UserName cannot be empty" -Type WARNING
                Update-StatusBar -Activity Validating -Text "UserName cannot be empty"
                $preReqs = "Not Met"
            }
            if (($TextBoxRRASPassword.Text -eq $null) -or ($TextBoxRRASPassword.Text -eq ""))
            {
                Write-OutputConfigBox -OutputBoxMessage "Password cannot be empty" -Type WARNING
                Update-StatusBar -Activity Validating -Text "Password cannot be empty"
                $preReqs = "Not Met"
            }
           
            if ($preReqs -ne "Not Met")
            {
                Write-OutputConfigBox -OutputBoxMessage "Adding RRAS Server Details to Grid view" -Type INFO
                Update-StatusBar -Activity Ready -Text " "
                AddRRASServertoGridView        
            }
        })
       
        $ButtonConfigRRASRemove = New-Object System.Windows.Forms.Button
        $ButtonConfigRRASRemove.Location = New-Object System.Drawing.Size(410,70)
        $ButtonConfigRRASRemove.Size = New-Object System.Drawing.Size(120,30)
        $ButtonConfigRRASRemove.Text = "Remove Server"
        $ButtonConfigRRASRemove.TabIndex = "1"
        $ButtonConfigRRASRemove.Anchor = "Top, Left"
        $ButtonConfigRRASRemove.Enabled = $true
        $ButtonConfigRRASRemove.Add_Click({        
            RemoveRRASServertoGridView
        })
       
        $ButtonConfigBackToMainForm = New-Object System.Windows.Forms.Button
        $ButtonConfigBackToMainForm.Location = New-Object System.Drawing.Size(540,70)
        $ButtonConfigBackToMainForm.Size = New-Object System.Drawing.Size(120,30)
        $ButtonConfigBackToMainForm.Text = "Back To Main Form"
        $ButtonConfigBackToMainForm.TabIndex = "1"
        $ButtonConfigBackToMainForm.Anchor = "Top, Left"
        $ButtonConfigBackToMainForm.Enabled = $true
        $ButtonConfigBackToMainForm.Add_Click({        
            CheckConfigurationFile
            LoadExecutionForm
        })
       
        # Lables
        $LabelRRASServer = New-Object System.Windows.Forms.Label
        #$LabelRRASServer.Font = New-Object System.Drawing.Font("Arial", "10",[System.Drawing.FontStyle]::Regular)
        $LabelRRASServer.Location = New-Object System.Drawing.Size(15,35)
        $LabelRRASServer.Size = New-Object System.Drawing.Size(160,30) 
        $LabelRRASServer.Anchor = "Top, Left"  
        $LabelRRASServer.Text = "Enter RRAS Server Name"
       
        $LabelRRASUsername = New-Object System.Windows.Forms.Label
        #$LabelRRASUsername.Font = New-Object System.Drawing.Font("Arial", "10",[System.Drawing.FontStyle]::Regular)
        $LabelRRASUsername.Location = New-Object System.Drawing.Size(15,65)
        $LabelRRASUsername.Size = New-Object System.Drawing.Size(160,30)   
        $LabelRRASUsername.Anchor = "Top, Left"
        $LabelRRASUsername.Text = "Enter RRAS Server UserName"
       
        $LabelRRASPassword = New-Object System.Windows.Forms.Label
        #$LabelRRASPassword.Font = New-Object System.Drawing.Font("Arial", "10",[System.Drawing.FontStyle]::Regular)
        $LabelRRASPassword.Location = New-Object System.Drawing.Size(15,95)
        $LabelRRASPassword.Size = New-Object System.Drawing.Size(160,30)   
        $LabelRRASPassword.Anchor = "Top, Left"
        $LabelRRASPassword.Text = "Enter RRAS Server Password" 
       
        # RichTextBox
        $OutputConfigBox = New-Object System.Windows.Forms.RichTextBox
        $OutputConfigBox.Location = New-Object System.Drawing.Size(20,475)
        $OutputConfigBox.Size = New-Object System.Drawing.Size(838,145)
        $OutputConfigBox.Anchor = "Bottom, Left, Right"
        $OutputConfigBox.Font = "Courier New"
        $OutputConfigBox.BackColor = "white"
        $OutputConfigBox.ReadOnly = $true
        $OutputConfigBox.MultiLine = $true
       
        $TextBoxRRASServer = New-Object System.Windows.Forms.RichTextBox
        $TextBoxRRASServer.Location = New-Object System.Drawing.Size(180,30)
        $TextBoxRRASServer.Size = New-Object System.Drawing.Size(200,25)
        $TextBoxRRASServer.Anchor = "Top, Left"
        $TextBoxRRASServer.Font = "Courier New"
        $TextBoxRRASServer.BackColor = "white"
        $TextBoxRRASServer.ReadOnly = $false
        $TextBoxRRASServer.MultiLine = $false
       
        $TextBoxRRASUsername = New-Object System.Windows.Forms.RichTextBox
        $TextBoxRRASUsername.Location = New-Object System.Drawing.Size(180,60)
        $TextBoxRRASUsername.Size = New-Object System.Drawing.Size(200,25)
        $TextBoxRRASUsername.Anchor = "Top, Left"
        $TextBoxRRASUsername.Font = "Courier New"
        $TextBoxRRASUsername.BackColor = "white"
        $TextBoxRRASUsername.ReadOnly = $false
        $TextBoxRRASUsername.MultiLine = $false
       
        $TextBoxRRASPassword = New-Object System.Windows.Forms.TextBox
        $TextBoxRRASPassword.Location = New-Object System.Drawing.Size(180,90)
        $TextBoxRRASPassword.Size = New-Object System.Drawing.Size(200,30)
        $TextBoxRRASPassword.Anchor = "Top, Left"
        $TextBoxRRASPassword.Font = "Courier New"
        $TextBoxRRASPassword.BackColor = "white"
        $TextBoxRRASPassword.ReadOnly = $false
        $TextBoxRRASPassword.MultiLine = $false
        $TextBoxRRASPassword.PasswordChar = '*'
       
    #endregion Configuration Form page

#endregion Windows Form Settings

#region Script Execution
    #-----------------------------Execution starts here----------------------#
   
    if (Test-Path -Path $ConfigurationFolder)
    {
        Write-OutputBox "Configuration Folder already exists, no action required" -Type INFO
    }
    Else
    {
        Write-OutputBox "Configuration Folder does not exist, creating Folder" -Type INFO
        Try
        {
            mkdir $ConfigurationFolder
        }
        Catch
        {
            Write-OutputBox "Issues while creating Configuration Folder: $_.Exception.Message" -Type INFO
        }
    }
   
    #CheckConfigurationFile
    CheckConfigurationFile 

    #Load Form
    Load-Form
}
#endregion Script Execution

Comments are closed