Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Отключение и подключение интернет соединения (http://forum.oszone.net/showthread.php?t=270884)

drmodjo 28-10-2013 23:52 2242904

Отключение и подключение интернет соединения
 
Всем привет. В первую очередь благодарность всем тем, кто поддерживает данный ресурс. У меня к вам такая просьба... Нужен cmd файл выполняющий скрипт отключения и подключения интернет соединения. Вся сложность в том, чтобы скрипт выполнял задачу автоматически влюбой версии Windows 8/8.1 . Заранее благодарю всех кто поможет.

sunnykey 29-10-2013 13:55 2243205

Цитата:

Цитата drmodjo
Всем привет. В первую очередь благодарность всем тем, кто поддерживает данный ресурс. У меня к вам такая просьба... Нужен cmd файл выполняющий скрипт отключения и подключения интернет соединения. Вся сложность в том, чтобы скрипт выполнял задачу автоматически влюбой версии Windows 8/8.1 . Заранее благодарю всех кто поможет. »

Пожалуйста поясните, что значит "отключал интернет соединение"? У вас PPPoE, VPN, Прямой доступ, WiFi перерезать?

drmodjo 29-10-2013 14:24 2243223

Благодарю, что откликнулись. Дело в том, что скрипт будет использоваться на разных компьютерах с разными подключениями, поэтому нужно что-то универсальное.

sunnykey 29-10-2013 15:45 2243278

Цитата:

Цитата drmodjo
Благодарю, что откликнулись. Дело в том, что скрипт будет использоваться на разных компьютерах с разными подключениями, поэтому нужно что-то универсальное. »

Универсальное - это отключить сетевой адптер. Пойдёт?

Iska 29-10-2013 16:06 2243295

sunnykey, Вы ещё не спросили у автора, по каким признакам среди нескольких следует выбирать потребный ;).

sunnykey 29-10-2013 16:10 2243297

Цитата:

Цитата Iska
sunnykey, Вы ещё не спросили у автора, по каким признакам среди нескольких следует выбирать потребный . »

Как всегда делаем хардкор, рубим всё даже loopback XD

drmodjo 29-10-2013 17:20 2243351

Цитата:

Универсальное - это отключить сетевой адптер. Пойдёт?
Да, пойдет. Важно, что на разных компьютерах это будут разные сетевые адаптеры. В любом случае у компьютера не должно быть доступа в интернет, а каким путем наверное все равно. Главное, чтобы скрипт работал на всех компьютерах и разных редакциях Windows 8/8.1

Elven 29-10-2013 17:47 2243367

http://support.microsoft.com/?scid=kb%3Bru%3B311272
читаешь описание, скачиваешь тулзу, отбираешь нужные классы устройств и рубишь их к чертовой бабушке!
вот здесь похожая проблемма разбиралась недавно: http://forum.oszone.net/thread-270681.html

sunnykey 30-10-2013 17:17 2243984

Цитата:

Цитата drmodjo
Да, пойдет. Важно, что на разных компьютерах это будут разные сетевые адаптеры. В любом случае у компьютера не должно быть доступа в интернет, а каким путем наверное все равно. Главное, чтобы скрипт работал на всех компьютерах и разных редакциях Windows 8/8.1 »

Выключение на PoSH
Код:

(Get-WmiObject "win32_networkadapter" -Filter "PhysicalAdapter='true'").Disable()
Включение на Posh
Код:

(Get-WmiObject "win32_networkadapter" -Filter "PhysicalAdapter='true'").Enable()

Sisin 04-06-2018 14:20 2816782

Подскажите, пожалуйста, как с помощью bat осуществить проверку включено подключение по локальной сети или нет?
Смысл, чтобы при запуске bat проверялось подключение: если активно, то выключить, а если нет, то включить.

netsh interface set interface name="Подключение по локальной сети" admin=DISABLED
netsh interface set interface name="Подключение по локальной сети" admin=ENABLED

YuS_2 04-06-2018 22:48 2816865

Цитата:

Цитата Sisin
Подскажите, пожалуйста, как с помощью bat осуществить проверку включено подключение по локальной сети или нет? »

Например, так:
Код:

wmic path win32_networkadapter where physicaladapter="true" get netenabled,deviceid /value|findstr /i "deviceid netenabled"

Sisin 05-06-2018 10:20 2816932

Цитата:

Цитата YuS_2
wmic path win32_networkadapter where physicaladapter="true" get netenabled,deviceid /value|findstr /i "deviceid netenabled" »

А как теперь заставить инет отключаться, если он включен и включаться, если выключен??

YuS_2 05-06-2018 12:17 2816946

Цитата:

Цитата Sisin
А как теперь заставить инет отключаться, если он включен и включаться, если выключен?? »

Включайте фантазию :)
например так:
Код:

@echo off
set deviceid=9
for /f "delims=" %%a in ('
        wmic path win32_networkadapter where deviceid^=%deviceid% get netenabled /value^|find /i "netenabled"
') do set %%a
if "%NetEnabled%"=="FALSE" (wmic path win32_networkadapter where deviceid=%deviceid% call enable) else (
        wmic path win32_networkadapter where deviceid=%deviceid% call disable
)
pause&exit

где %deviceid% - ID физического адаптера, которым желаете управлять

С помощью чуть расширенной строки, приведенной выше, можно легко определить требующийся ID
Код:

wmic path win32_networkadapter where physicaladapter="true" get netenabled,deviceid,name /value|findstr /i "deviceid netenabled name"
Если же адаптеров больше чем один и каждым требуется управлять отдельно, то можно создать псевдомассив переменных и далее управлять уже через них:
Код:

@echo off
setlocal enabledelayedexpansion
set i=0
set n=1
rem Собственно, создаем массив:
for /f "delims=" %%a in ('
        wmic path win32_networkadapter where physicaladapter^=true get netenabled^,deviceid^,name /value^|findstr /i "deviceid netenabled name"
') do set /a i+=1&set "var!n!%%a"&if !i! equ 3 (set/a i=0&set/a n+=1)

rem Следующий цикл демонстрирует наличие уникальных переменных, привязанных к ID конкретного адаптера:
for /l %%i in (1,1,20) do if defined var%%iDeviceID set var%%i&echo.====================

pause


Sisin 05-06-2018 12:54 2816953

Цитата:

Цитата YuS_2
Включайте фантазию »

Оптимальнее, наверное, так сделать:
Код:

@echo off
for /f %%a in (
  'wmic path win32_networkadapter where "physicaladapter=true" get netenabled /value^|find /i "netenabled"'
) do set %%a
if "%NetEnabled%"=="TRUE" (wmic path win32_networkadapter where "physicaladapter=true" call disable) else (
        wmic path win32_networkadapter where "physicaladapter=true" call enable
)
pause


YuS_2 05-06-2018 13:14 2816956

Цитата:

Цитата Sisin
Оптимальнее »

нет, это точно не оптимизация :)
Во-первых, delims там вообще не нужен, у меня он записан на автомате, по привычке...
Во-вторых, в цикле, переменная %NetEnabled% получит только последнее значение из всего списка адаптеров... т.е. слежение будет только за последним адаптером в списке... а команда на включение будет отправляться для всех физических адаптеров, поэтому о корректности, в этом случае, говорить не приходится

А если есть желание управлять сразу всеми адаптерами, но в зависимости от их текущего состояния, то опять же, вот здесь, я добавил код, создающий массив уникальных переменных, привязанных к конкретному адаптеру. Вот их можно использовать для индивидуального управления адаптерами...

DJ Mogarych 05-06-2018 13:46 2816962

Цитата:

Цитата drmodjo
у компьютера не должно быть доступа в интернет, а каким путем наверное все равно. Главное, чтобы скрипт работал на всех компьютерах и разных редакциях Windows 8/8.1 »

Извините, а на шлюзе какие-то правила настроить не вариант?

YuS_2 05-06-2018 13:56 2816965

Цитата:

Цитата DJ Mogarych
Извините, а на шлюзе какие-то правила настроить не вариант? »

Бокорезами перекусить провод или оптику :) шутка
Шлюза ведь под рукой может и не быть... всё зависит от конфигурации сети...

Sisin 07-06-2018 11:53 2817224

Блин, а как тогда сделать батник, который бы отключал инет на любом компьютере, запускал приложение и через 10 секунд включал???

PS: ну или не батник.

Iska 07-06-2018 12:40 2817236

Sisin, Вам сие вообще для чего нужно? Какова основная задача?

Sisin 07-06-2018 12:47 2817238

Цитата:

Цитата Iska
Вам сие вообще для чего нужно? Какова основная задача? »

Запускать Setup.exe, не выключая интернет вручную.

Iska 07-06-2018 17:02 2817289

Sisin, а если тогда вот так — просто временно, на время работы Setup.exe, создавать пару правил для фаерволла:
Скрытый текст
Код:

Option Explicit

Const strSourceFileName = "Setup.exe"

Const NET_FW_IP_PROTOCOL_ANY = 256

Const NET_FW_RULE_DIR_IN  = 1
Const NET_FW_RULE_DIR_OUT = 2

Const NET_FW_ACTION_BLOCK = 0


Dim strSourceFile

Dim objNetFwPolicy2
Dim objNetFwRule2


With WScript.CreateObject("Scripting.FileSystemObject")
        strSourceFile = .BuildPath(.GetParentFolderName(WScript.ScriptFullName), strSourceFileName)
       
        If Not .FileExists(strSourceFile) Then
                WScript.Echo "Can't find source file [" & strSourceFile & "]."
                WScript.Quit 1
        End If
End With


Set objNetFwPolicy2 = WScript.CreateObject("HNetCfg.FwPolicy2")

For Each objNetFwRule2 In objNetFwPolicy2.Rules
        If StrComp(objNetFwRule2.ApplicationName, strSourceFile, vbTextCompare) = 0 Then
                objNetFwPolicy2.Rules.Remove objNetFwRule2.Name
        End If
Next

Set objNetFwRule2 = WScript.CreateObject("HNetCfg.FWRule")

With objNetFwRule2
        .Name            = "My Installer"
        .Description    = "Disallow My Installer network traffic"
        .ApplicationName = strSourceFile
        .Protocol        = NET_FW_IP_PROTOCOL_ANY
        .Profiles        = objNetFwPolicy2.CurrentProfileTypes
        .Direction      = NET_FW_RULE_DIR_IN
        .Action          = NET_FW_ACTION_BLOCK
       
        .Enabled        = True
End With

objNetFwPolicy2.Rules.Add objNetFwRule2

Set objNetFwRule2 = Nothing

Set objNetFwRule2 = WScript.CreateObject("HNetCfg.FWRule")

With objNetFwRule2
        .Name            = "My Installer"
        .Description    = "Disallow My Installer network traffic"
        .ApplicationName = strSourceFile
        .Protocol        = NET_FW_IP_PROTOCOL_ANY
        .Profiles        = objNetFwPolicy2.CurrentProfileTypes
        .Direction      = NET_FW_RULE_DIR_OUT
        .Action          = NET_FW_ACTION_BLOCK
       
        .Enabled        = True
End With

objNetFwPolicy2.Rules.Add objNetFwRule2

Set objNetFwRule2 = Nothing

WScript.CreateObject("WScript.Shell").Run """" & strSourceFile & """", 1, True

For Each objNetFwRule2 In objNetFwPolicy2.Rules
        If StrComp(objNetFwRule2.ApplicationName, strSourceFile, vbTextCompare) = 0 Then
                objNetFwPolicy2.Rules.Remove objNetFwRule2.Name
        End If
Next

WScript.Quit 0


?!

Кривовастенько, конечно, да…

YuS_2 07-06-2018 20:03 2817317

Цитата:

Цитата Sisin
а как тогда сделать батник, который бы отключал инет на любом компьютере, запускал приложение и через 10 секунд включал??? »

Опять же, фантазия должна помочь, а инструменты вроде выше опубликованы уже... :)
Код:

@echo off
setlocal enabledelayedexpansion
set i=0
set n=1

set m=20 &: Предполагаемое число адаптеров

rem Собственно, создаем массив:
for /f "delims=" %%a in ('
        wmic path win32_networkadapter where physicaladapter^=true get ^
        netenabled^,deviceid^,name /value^|findstr /i "deviceid netenabled name"
') do set /a i+=1&set "var!n!%%a"&if !i! equ 3 (set/a i=0&set/a n+=1)

rem Выключаем адаптер, если включен:
for /l %%i in (1,1,%m%) do (
        if defined var%%iDeviceID (
                call set "tmp=%%var%%iNetEnabled%%"
                call set "ID=%%var%%iDeviceID%%"
                if "!tmp!"=="TRUE" (
                        wmic path win32_networkadapter where deviceid=!ID! call disable
                )
        )
)

echo А здесь запускаем приложение.........
echo Только надо не забыть указать абсолютный путь к нему, либо
echo переход в каталог где хранится это приложение
rem Setup.exe

timeout /t 10

rem Восстанавливаем предыдущее состояние изначально включенных адаптеров
for /l %%i in (1,1,%m%) do (
        if defined var%%iDeviceID (
                call set "tmp=%%var%%iNetEnabled%%"
                call set "ID=%%var%%iDeviceID%%"
                if "!tmp!"=="TRUE" (
                        wmic path win32_networkadapter where deviceid=!ID! call enable
                )
        )
)
endlocal
pause&exit /b


Sisin 08-06-2018 10:46 2817395

Цитата:

Цитата YuS_2
Опять же, фантазия должна помочь, а инструменты вроде выше опубликованы уже... »

YuS_2, я правильно понимаю, что такой батник отключит все адаптеры (если их не больше 20), а потом восстановит состояние как было? Выключенные изначально адаптеры остануться выключенными??

YuS_2 08-06-2018 14:05 2817442

Цитата:

Цитата Sisin
правильно понимаю, что такой батник отключит все адаптеры (если их не больше 20), а потом восстановит состояние как было? »

Да. Но не все, а только physicaladapter=true
Надо просто запустить пакетник не от имени администратора, тогда вывод команд покажет какие адаптеры будут отключаться и включаться, но фактически ничего происходить не будет...
Чтобы всё сработало, сценарий необходимо запустить от имени администратора.


Время: 20:16.

Время: 20:16.
© OSzone.net 2001-