Vinnaren i pepparkakshustävlingen!
2017-03-15, 17:41
  #1
Medlem
Jag har skrivit ett batch-script som laddar ner Openvpn och ställer in det som en autostartande tjänst (För ovpn.)

För att ladda ner OpenVPN använder jag mig av bitsadmin.

Nu till problemet, jag vill kunna kolla vilken som är den senaste versionen av OpenVPN och ladda ner den. Vilket jag gissar blir svårt ifrån ett batch-script!?

Vilket programmeringsspråk är lämpligt att använda sig av, det bör vara relativt enkelt att lära sig.
Python? Länka gärna ett exempel som kollar Openvpns nedladdningssida efter senaste versionen.
Nedladdningssidan: https://swupdate.openvpn.org/community/releases/

För att ge lite inblick i hur scriptet ser ut nu så bifogar jag det.

Delen för att Ladda ner OpenVPN (+ Silent install.):
Kod:
:INSTALLOPENVPN
cls
IF EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn already installed. & pause & goto :installmenu
echo Downloading and installing OpenVpn, this can take a couple minutes...
bitsadmin.exe /transfer "ovpndowload" /priority high %openvpnpath% "%tempdir%\openvpninstall.exe" >nul
if %ERRORLEVEL% NEQ 0 cls & echo ERROR: Can't find file. & pause & goto :installmenu
openvpninstall.exe /S /D=%programfiles%\openvpn
del openvpninstall.exe
del "%public%\desktop\openvpn gui.lnk"
cls

Hela scriptet i nästa inlägg (För många tecken för ett inlägg.)
__________________
Senast redigerad av Dserv 2017-03-15 kl. 17:51.
Citera
2017-03-15, 17:41
  #2
Medlem
Hela scriptet:
Eller lite mer överskådligt med syntax highlighting. http://pastebin.com/X57rX7K5
Kod:
:: Script by Dserv

@echo off

::check if run as admin
openfiles > NUL 2>&1 
if %ERRORLEVEL% EQU 1 echo You need to run this script as Administrator. & pause & exit

::check processor architecture and set variable for program folder and openvpn-location.
if not "%processor_architecture%"=="AMD64" echo This is a 64-bit installer. & pause & exit 

::check internet connection
echo Checking internet connection...
ping -4 www.google.se >nul
if %ERRORLEVEL% EQU 1 cls & ping www.google.se >nul
if %ERRORLEVEL% EQU 1 cls echo No internet connection & pause & exit

::Set tempdir
set tempdir=%userprofile%\desktop
cd %tempdir%

::Set paths and filenames and service variables.
set openvpnpath=https://swupdate.openvpn.org/community/releases/openvpn-install-2.3.10-I604-x86_64.exe
set swedenudp=https://files.ovpn.se/windows/ovpn-se.ovpn
set swedentcp=https://files.ovpn.se/windows/ovpn-se-tcp.ovpn
set germanyudp=https://files.ovpn.se/windows/ovpn-de.ovpn
set germanytcp=https://files.ovpn.se/windows/ovpn-de-tcp.ovpn
set netherlandudp=https://files.ovpn.se/windows/ovpn-nl.ovpn
set netherlandtcp=https://files.ovpn.se/windows/ovpn-nl-tcp.ovpn
set canadaudp=https://files.ovpn.se/windows/ovpn-ca.ovpn
set canadatcp=https://files.ovpn.se/windows/ovpn-ca-tcp.ovpn
set service_run=SC Start "Openvpnservice"
set service_stop=SC Stop "Openvpnservice"
set service_auto=SC Config "Openvpnservice" start= AUTO

::Choices are connected to installopenvpn (keep in mind when adding choices betweeen 1-3.)
:INSTALLMENU
::Only for menu verification.
set instp=if exist "%programfiles%\openvpn\bin\openvpn.exe" >nul
cls
echo OpenVpn version: %openvpnpath%
echo.
echo Note: This script relies on the availability of Openvpn version 2.3.10. 
echo If installation process (application install or configuration change) 
echo takes more then 5 minutes terminate script, and contact Dserv for a new version.
echo.

echo MENU:
echo [1] INSTALL OPENVPN
%instp% echo [2] CHANGE CONNECTION CONFIG
%instp% echo [3] CHANGE PASSWORD
%instp% echo [4] STOP SERVICE
%instp% echo [5] START SERVICE
%instp% echo [6] KILLSWITCH
echo [Q] EXIT
echo ==========================

echo Enter selection and press ENTER key:
set /P menuchoice=
if /I "%menuchoice%" EQU "1" goto :installopenvpn
if /I "%menuchoice%" EQU "2" goto :changeconfig
if /I "%menuchoice%" EQU "3" goto :changepass
if /I "%menuchoice%" EQU "4" goto :stop_sc
if /I "%menuchoice%" EQU "5" goto :start_sc
if /I "%menuchoice%" EQU "6" goto :killswitch
if /I "%menuchoice%" EQU "Q" exit

:INSTALLOPENVPN
cls
IF EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn already installed. & pause & goto :installmenu
echo Downloading and installing OpenVpn, this can take a couple minutes...
bitsadmin.exe /transfer "ovpndowload" /priority high %openvpnpath% "%tempdir%\openvpninstall.exe" >nul
if %ERRORLEVEL% NEQ 0 cls & echo ERROR: Can't find file. & pause & goto :installmenu
openvpninstall.exe /S /D=%programfiles%\openvpn
del openvpninstall.exe
del "%public%\desktop\openvpn gui.lnk"
cls

:CHANGECONFIG
cls
if "%menuchoice%"=="2" IF NOT EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn is not installed. & pause & goto :installmenu
if "%menuchoice%"=="2" %service_stop% >nul
IF EXIST "%programfiles%\openvpn\config\*.ovpn" del "%programfiles%\openvpn\config\*.ovpn" >nul
echo [1] Sweden servers UDP
echo [2] Sweden servers TCP
echo [3] Germany servers UDP
echo [4] Germany servers TCP
echo [5] Netherland servers UDP
echo [6] Netherland servers TCP
echo [7] Canada servers UDP
echo [8] Canada servers TCP

echo Select serverconfig and press ENTER key:
set /P confchoice=
if /I "%confchoice%" EQU "1" set addr=%swedenudp% & set addrfile=ovpn-se.ovpn >nul
if /I "%confchoice%" EQU "2" set addr=%swedentcp% & set addrfile=ovpn-se-tcp.ovpn >nul
if /I "%confchoice%" EQU "3" set addr=%germanyudp% & set addrfile=ovpn-de.ovpn >nul
if /I "%confchoice%" EQU "4" set addr=%germanytcp% & set addrfile=ovpn-de-tcp.ovpn >nul
if /I "%confchoice%" EQU "5" set addr=%netherlandudp% & set addrfile=ovpn-nl.ovpn >nul
if /I "%confchoice%" EQU "6" set addr=%netherlandtcp% & set addrfile=ovpn-nl-tcp.ovpn >nul
if /I "%confchoice%" EQU "7" set addr=%canadaudp% & set addrfile=ovpn-ca.ovpn >nul
if /I "%confchoice%" EQU "8" set addr=%canadatcp% & set addrfile=ovpn-ca-tcp.ovpn >nul

cls
echo Installing server configuration wait...
bitsadmin.exe /transfer "ovpndowload" %addr% "%tempdir%\%addrfile%" >nul
if %ERRORLEVEL% NEQ 0 cls & echo ERROR: Can't find file. & pause & goto :installmenu
icacls "*.ovpn" /setowner %username% /T /C >nul

setlocal enabledelayedexpansion
for /f "tokens=1,* delims=¶" %%A in ( '"findstr /n ^^ %addrfile%"') do (
   SET string=%%A
   for /f "delims=: tokens=1,*" %%a in ("!string!") do set "string=%%b"
   if  "!string!" == "" (
       echo.>>config.tmp
   ) else (
      SET modified=!string:auth-user-pass=auth-user-pass auth.txt!
      echo !modified! >> config.tmp
  )
)
del %addrfile%
rename config.tmp %addrfile%
endlocal

copy %addrfile% "%programfiles%\OpenVPN\config" >nul
del %addrfile% >nul

if "%menuchoice%"=="1" goto :changepass
if "%menuchoice%"=="2" %service_run% >nul & cls & echo Config changed to %addr% 
pause
goto :installmenu


:CHANGEPASS
cls
if "%menuchoice%"=="3" IF NOT EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn is not installed. & pause & goto :installmenu
if "%menuchoice%"=="3" %service_stop% >nul
set /p usern= Input your vpn username:
set /p passw= input your vpn password:
cls
echo Username:%usern% Password:%passw% is this correct? [Y] [N]
set /P m=
if /I "%m%" EQU "Y" echo Yes >nul
if /I "%m%" EQU "N" goto :CHANGEPASS
cls
cd %tempdir% >nul
echo %usern%>auth.txt
echo %passw%>>auth.txt
icacls "auth.txt" /setowner %username% /T /C >nul
copy auth.txt "%programfiles%\OpenVPN\config" >nul
del auth.txt >nul
if "%menuchoice%"=="1" %service_auto% >nul & %service_run% >nul & echo OpenVpn is installed and running.
if "%menuchoice%"=="3" %service_run% >nul & echo Password changed.
pause
goto :installmenu

:STOP_SC
cls
IF NOT EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn is not installed. & pause & goto :installmenu
sc query "openvpnservice" | findstr /i "STOPPED" >nul
  if %errorlevel%== 0 (
  echo Service already stopped...
  pause
  goto :installmenu
) else (
  echo not stopped >nul
)
%service_stop% >nul
timeout 2 >nul
:STOP_SC_CHECK
sc query "openvpnservice" | findstr /i "STOPPED" >nul
  if %errorlevel%== 1  (
  timeout 5 >nul
  goto :stop_sc_check
) else (
  echo Service stopped...
  pause
  goto :installmenu
)

:START_SC
cls
IF NOT EXIST "%programfiles%\openvpn\bin\openvpn.exe" echo OpenVpn is not installed. & pause & goto :installmenu
sc query "openvpnservice" | findstr /i "RUNNING" >nul
  if %errorlevel%== 0 (
  echo Service already running...
  pause
  goto :installmenu
) else (
  echo No running >nul
)
%service_run% >nul
timeout 2 >nul
:START_SC_CHECK
sc query "openvpnservice" | findstr /i "RUNNING" >nul
  if %errorlevel%== 1  (
  timeout 5 >nul
  goto :start_sc_check
) else (
  echo Service started...
  pause
  goto :installmenu
)

:KILLSWITCH
cls
echo This will set your network connection to private if it's public or domain. 
echo After that install two firewall rules. 
echo which prevent your torrent client to communicate as long as your vpn connection is lost.
echo.
echo Do you want to install these rules? [Y] [N]
set /P killswitchyesno=
if /I "%killswitchyesno%" EQU "Y" echo yes >nul
if /I "%killswitchyesno%" EQU "N" goto :installmenu
cls
set /p torrentlocation= Input path: (example: C:\Program Files (x86)\uTorrent\uTorrent.exe)
cls
if not exist "%torrentlocation%" echo Can't find torrentclient. & pause & cls & goto :killswitch

for /f "delims=" %%a in ('reg query "HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\networklist\Profiles" ^| FIND "{"') do set var=%%~nxa

reg query "HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\networklist\Profiles\%var%" /v Category | find "0x1">nul

IF %ERRORLEVEL%== 0 (
    goto :torrent_installrules
) else (
for /f "delims=" %%a in ('reg query "HKEY_LOCAL_MACHINE\software\microsoft\windows nt\currentversion\networklist\Profiles" ^| FIND "{"') do set var=%%~nxa
Reg Add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\%var%" /V Category /t REG_DWORD /d 1 /f >nul
)

:torrent_installrules
cls
netsh advfirewall firewall show rule name="Private torrent (IN)" >nul
if %errorlevel%== 0 ( 
    echo Rules already installed.
) ELSE ( 
    netsh advfirewall firewall add rule name="Private torrent (IN)" dir=in action=block program="%Torrentlocation%" profile=private,domain >nul
    netsh advfirewall firewall add rule name="Private torrent (OUT)" dir=out action=block program="%Torrentlocation%" profile=private,domain >nul
    echo Rules installed.
)
pause
cls
goto :installmenu
__________________
Senast redigerad av Dserv 2017-03-15 kl. 17:55.
Citera
2017-03-16, 12:54
  #3
Medlem
studioxswes avatar
Sedan powershell kom skriver jag ALLA mina windowscript i PS.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback