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