Cannot loop Get-VPNConnection.EncryptionLevel

Welcome Forums General PowerShell Q&A Cannot loop Get-VPNConnection.EncryptionLevel

This topic contains 0 replies, has 1 voice, and was last updated by  Jeanx 9 months, 1 week ago.

  • Author
    Posts
  • #93729

    Participant
    Points: 0
    Rank: Member

    I am trying to get my script to tell the user to manually change the encrytptionlevel for a vpn connection since Microsoft decided to make it to where Set-VPNConnection cannot change a "PAP" connection to "required" encryption.

    So, when I try a while loop, it checks the value for Get-VPNConnection.encrytionlevel and if it does NOT equal "Required", it opens the network connections and tells the user to manually change encryptionlevel from "Optional", to "Required", then to press Enter when done, then rechecks and if it is still not set to loop the process. I want it to check the property and once it reads that its set to "Required", exit the loop and continue.

    My problem is that even when its set to "required" it will still keep looping no matter what and never exit.

    Heres my code (Dont mind the many extra words, I was playing around with other coding to try:

    $Shell = $Host.UI.RawUI
    $size = $Shell.WindowSize
    $size.width=100
    $size.height=35
    $Shell.WindowSize = $size
    $size = $Shell.BufferSize
    $size.width=100
    $size.height=35
    $Shell.BufferSize = $size
    
    Function 3BlankLines{
    
        Write-Host ""
        Write-Host ""
        Write-Host ""
    
    }
    
    
    
    if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }
    
    
    3BlankLines
    3BlankLines  
    Write-Host "                          Just getting some tools ready before we begin"
    $null = Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
    $null = Install-Module -Name VPNCredentialsHelper -Force
    cls
    3BlankLines 
    3BlankLines 
    Write-Host "                             Thank You for your patience, lets begin!"
    
    Start-Sleep -seconds 3
    
    
    
    #$Host.UI.RawUI.BackgroundColor = "Black"
    $Host.UI.RawUI.ForeGroundColor = "White"
    
    
    $global:vName = $null
    $global:vServer = $null
    $global:vUser = $null
    $global:vPassword = $null
    $global:vSecret = $null
    $global:vPassFile = "C:\VPN\VPN"
    $global:vDIR = "C:\VPN"
    $global:vGVPN = Get-VpnConnection -Name $global:vName
    $global:vELevel = Write-Host $global:vGVPN.EncryptionLevel
    
    
    
    If(!(test-path $global:vDIR))
    {
          New-Item -ItemType Directory -Force -Path $global:vDIR
    }
    
    
    Function HostUIBW {
        #$Host.UI.RawUI.BackgroundColor = "Black"
        $Host.UI.RawUI.ForeGroundColor = "White"
    }
    
    Function HostUIBR {
        #$Host.UI.RawUI.BackgroundColor = "Black"
        $Host.UI.RawUI.ForeGroundColor = "Red"
    }
    
    Clear-Host
    HostUIBW
    
    
    
    
    Function vpnWelcome {
        cls
        HostUIBW
        3BlankLines
        Write-Host "                                Welcome to the"-ForegroundColor White -nonewline
        Write-Host " Computer Concern " -ForegroundColor Red
        Write-Host ""
        Write-Host "                      Client VPN and Remote Desktop Connection Setup tool" -ForegroundColor White
        3BlankLines
        HostUIBW
    }
    
    Function vpnName {
        HostUIBW
        Write-Host "                      What is the name of the VPN Connection?     "  -nonewline
        HostUIBR
        $global:vName = Read-Host
        Write-Host ""
        Write-Host ""
        
    }
    
    Function vpnAddress {
        HostUIBW
        Write-Host "                      What is the Server Address for the vpn you are setting up?      "  -nonewline
        HostUIBR
        $global:vServer = Read-Host
        Write-Host ""
        Write-Host ""
        
    }
    
    Function vpnUsername {
        HostUIBW
    
        Write-Host "                      What is the username for the vpn you are setting up?      "  -nonewline
        HostUIBR
        $global:vUser = Read-Host
        Write-Host ""
        Write-Host ""
        
    }
    
    Function vpnPassword {
        HostUIBW
    
        Write-Host  "                      What is the password for the user?       "  -nonewline
        HostUIBR
        $global:vPassword = Read-Host
        Write-Host ""
        Write-Host ""
        
    }
    
    Function vpnSecret {
        HostUIBW
        Write-Host  "                      What is the Secret Key for the VPN Connection?        "  -nonewline
        HostUIBR
        $global:vSecret = Read-Host
        Write-Host ""
        Write-Host ""
        
    }
    
    #Function vpnDone {
    #}
    
    
    
    
    
    HostUIBW
    Clear-Host
    
    #Do{
        vpnWelcome
        vpnName
        vpnAddress
        vpnUsername
        vpnPassword
        vpnSecret
        HostUIBW
    
                    Write-Host "                      Are these settings correct? Y or N   " -nonewline
        HostUIBR
        $vConfirm = Read-Host
    
        while ($vConfirm -ne "y") {
    
            3BlankLines
            HostUIBW
            Write-Host "                     Which setting do you need to change? "
            Write-Host "                     1 - Name of VPN"
            Write-Host "                     2 - Server Address"
            Write-Host "                     3 - Username"
            Write-Host "                     4 - Password"
            Write-Host "                     5 - Secret Key"
            HostUIBR
            $vChange = Read-Host
    
                            switch ($vChange) {
    
                                1 {
                                    Clear-Host
                                    HostUIBW
                                    3BlankLines
                                    vpnName
                                    
                                }
    
                                2 {
                                    Clear-Host
                                    HostUIBW
                                    3BlankLines
                                    vpnAddress
                                    
                                }
    
                                3 {
                                    Clear-Host
                                    HostUIBW
                                    3BlankLines
                                    vpnUsername
                                    
                                }
    
                                4 {
                                    Clear-Host
                                    HostUIBW
                                    3BlankLines
                                    vpnPassword
                                    
                                }
    
                                5 {
                                    Clear-Host
                                    HostUIBW
                                    3BlankLines
                                    vpnSecret
                                    
                }
            }
                    HostUIBW
                    Write-Host "                      Are these settings correct? Y or N   " -nonewline
        HostUIBR
        $vConfirm = Read-Host 
        }
    #} Until ($vConfirm -eq "y")
    
    
    
    HostUIBW
    3BlankLines
    3BlankLines
    Write-Host "                          Creating VPN Connection Now!"
    
    
        $null = Add-VpnConnection -Name $vName -ServerAddress $vServer -TunnelType "L2tp" -EncryptionLevel "Optional" -AuthenticationMethod Pap -L2tpPsk $vSecret -RememberCredential -Force -Passthru
        Start-Sleep -seconds 2
        cls
        Start-Sleep -seconds 2
        3BlankLines
        3BlankLines
        Write-Host "                  Please change the encryption level to ~Require Encryption~"
    
    
    
    
    
    
    
    
    ############################  THIS IS THE SECTION OF CODE THAT I CANNOT GET TO WORK PROPERLY  #############################################
    
    
    
    
    
    
    
    
    
    do{
                    
                   $null = $global:vGVPN.EncryptionLevel
                   $global:vELevel
                   3BlankLines
                   3BlankLines
                   Write-Host "You need to change the encryption level to REQUIRED"
                   Start-Sleep -seconds 3
                   cls
                   HostUIBW
                   ncpa.cpl
                   Read-Host -Prompt "Press ENTER to continue..."
                   cls
                   $global:vELevel
                   Write-Host "Checking encryption level now..."
                   
    
    
    
    
    
    
    }while($global:vELevel -NotMatch "Required")
    
    
    
    
    
    
    ##############################################################################################################################################
    
    
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
    
    
    ConvertTo-SecureString -string $global:vPassword -asplaintext -force | convertfrom-securestring | out-file $global:vPassFile
    
    
    
    
      
      
    
    
    
    
    
    
    
    
    
    
    
    #Start-Sleep -seconds 2
    
      
    
    
    
    
    
    
    
    
        $null = Set-VpnConnectionUsernamePassword -connectionname $vName -username $vUser -password $vPassword
    
    HostUIBW
    3BlankLines
    3BlankLines
    Write-Host "                                   Creating Additional Files Now....."
    
    
    Start-Sleep -Seconds 2
    
    
    New-Item $global:vDIR\Remote.rdp -ItemType file
    
    
    $vFile = "C:\VPN\VPNConnect.ps1"
    
    $vScript = @'
    
    $Shell = $Host.UI.RawUI
    $size = $Shell.WindowSize
    $size.width=40
    $size.height=15
    $Shell.WindowSize = $size
    $size = $Shell.BufferSize
    $size.width=40
    $size.height=15
    $Shell.BufferSize = $size
    $Host.UI.RawUI.ForeGroundColor = "White"
    Clear-Host
    
    
    
    
    
    #Put the name of the VPN Connection here (it's whatever you named it when you set it up, quotes must be added)
    $vName ="VPN Name"
    
    
    #Put the VPN username here (Quotes included)
    $vUser="VPN User"
    
    
    #Put the VPN password here (Quotes included)
    $vPass="C:\VPN\VPN"
    
    
    #Put name of RDP client here
    $rdpClient="Remote.rdp"
    
    
    $securestring = convertto-securestring -string (get-content $vPass)
    $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securestring)
    $vDePass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
    
    
    
    #This is the If-ElseIf statement to connect/disconenct the VPN Connection
        $vpn = Get-VpnConnection -Name $vpnName
    		If($vpn.ConnectionStatus -eq "Disconnected"){
    		Write-Host "Connecting VPN Now..."
        $null = rasdial $vName $vUser $vDePass;
    	cls
    	Write-Host "...VPN now connected!"
    	cls
    	Write-Host "Opening Remote Connection...One Moment!"
    	Start-Sleep -seconds 3
    	Get-ChildItem -Path C:\ -Filter $rdpClient -Recurse -ErrorAction SilentlyContinue -Force | % {Start-Process $_.FullName}
    	}
    	
    	    If($vpn.ConnectionStatus -eq "Connected"){
    	$null = rasdial /disconnect:$vName
    	Write-Host "Terminating VPN Connection"
    	} 
    
    
    
    	Start-Sleep -seconds 1
    	
        
    	exit
    
    
    '@
    
    
    $vScript| Out-File $vFile
    
    
    
    
    $vVBS = @'
    
    
    
    
    
    
    
    
    
    
    '@
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    (Get-Content -Path $vFile) | ForEach-Object {$_ -Replace 'VPN Name', $global:vName } | Set-Content -Path $vFile
    (Get-Content -Path $vFile) | ForEach-Object {$_ -Replace 'VPN User', $global:vUser } | Set-Content -Path $vFile
    
    
    
    ii $global:vDIR
    
    
    Start-Sleep -Seconds 3
    
    
    

The topic ‘Cannot loop Get-VPNConnection.EncryptionLevel’ is closed to new replies.