1

Мне нужна виртуальная кнопка паники для отключения и проблем с сетью, чтобы я мог в любой момент нажать комбинацию клавиш, чтобы компьютер автоматически обнаружил проблемы с сетью или перезагрузил адаптер.

Я нашел это при создании сочетания клавиш:https://lifehacker.com/5783366/how-to-create-a-keyboard-shortcut-to-launch-anything-in-windows

Покопались по диагностике сети и нашли https://blogs.msdn.microsoft.com/mattbie/2010/11/09/running-a-troubleshooter-from-the-command-line/

msdt.exe /id NetworkDiagnosticsWeb ==> вызывает интерактивное приглашение. Мне не нужна интерактивная подсказка, я хочу вызвать инструмент, который начнет исправлять сетевое соединение как можно скорее без ручного вмешательства.

Если вопрос остается неясным: мне нужно создать ярлык или пакет, который вызывает полностью автоматическое восстановление сети, чтобы я мог связать его с сочетанием клавиш.

2 ответа2

2

Ниже приведен пакетный сценарий, который будет эмулировать нажатия клавиш для управления окном графического интерфейса « Интернет-соединения », которое появляется при msdt.exe /id NetworkDiagnosticsWeb .

По сути, он запустит команду msdt.exe /id NetworkDiagnosticsWeb , убедится , что окно с заголовком « Internet Connections активно, подождите 2 секунды, дважды нажмите клавишу Tab , Enter Один раз», приостановите 2 секунды, а затем снова нажмите « Enter чтобы немедленно приступить к устранению неполадок.


Пакетный скрипт

@ECHO OFF

start "" msdt.exe /id NetworkDiagnosticsWeb
ping -n 2 127.0.0.1 > nul

:VBSDynamicBuild
SET TempVBSFile=%tmp%\~tmpSendKeysTemp.vbs
IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"
ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >>"%TempVBSFile%"
ECHO Wscript.Sleep 500                                    >>"%TempVBSFile%"
ECHO WshShell.AppActivate "Internet Connections"          >>"%TempVBSFile%"
ECHO Wscript.Sleep 2000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{TAB 2}{ENTER}"                   >>"%TempVBSFile%"
ECHO Wscript.Sleep 2000                                   >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{ENTER}"                          >>"%TempVBSFile%"

CSCRIPT //nologo "%TempVBSFile%"
EXIT

Дополнительные ресурсы

1

Вы можете использовать командлет PowerShell Get-TroubleshootingPack, чтобы провести процесс создания файла ответов для последующего использования с командлетом Invoke-TroubleshootingPack для автоматизации.


Шаги: создание и запуск вручную

1. PowerShell (создать файл ответов)

$aFile = "C:\Folder\Path\AudioAnswerFile.xml"
Get-TroubleshootingPack -Path "C:\Windows\diagnostics\system\Networking" -AnswerFile $aFile

Варианты выбора при создании файла ответов

Важно: я выбрал только то, что, по моему мнению, нужно было выбрать, но проведу дополнительное тестирование и уделю больше времени и обдумывания каждому ответу на тот случай, если вы увидите что-то применимое в вашем случае.

  • [1] Web Connectivity
  • [1] Troubleshoot my connection to the Internet
  • [1] TCP
  • [1] I'm trying to reach a specific website or folder on a network
  • Выберите [x] Exit для всех остальных ответов и нажмите Enter


Содержимое файла ответов

Примечание: * Теперь, когда у вас есть файл ответов, вы можете использовать его для указания на задания, которые вы можете автоматизировать или создавать ярлыки для запуска в виде пакета, о чем я расскажу более подробно ниже.

<?xml version="1.0" encoding="UTF-8"?>
<Answers Version="1.0">
  <Interaction ID="IT_EntryPoint">
    <Value>HTTP</Value>
  </Interaction>
  <Interaction ID="IT_WebChoice">
    <Value>Internet</Value>
  </Interaction>
  <Interaction ID="IT_Protocol">
    <Value>6</Value>
  </Interaction>
  <Interaction ID="IT_DefaultConnectivityInitialChoice">
    <Value>HTTPorUNC</Value>
  </Interaction>
</Answers>

2. PowerShell (запустить процесс диагностики)

Примечание. Значение переменной $aFile должно указывать на файл ответов, который вы только что создали в # 1 выше.Значение переменной $dFolder должно быть папкой для проверки результатов диагностики после ее запуска.

$aFile = "C:\Folder\Path\AudioAnswerFile.xml"
$dFolder = "C:\Folder\Path\Diag"
$var = Get-TroubleshootingPack -Path "C:\Windows\diagnostics\system\Networking"
Invoke-TroubleshootingPack -Pack $v -AnswerFile $aFile -Unattended -Result $dFolder

Результаты

Теперь откройте файлы результатов этой команды, которую вы вызвали с файлом ответов, перейдя в папку, указанную в значении переменной $dFolder и у вас появятся файлы, которые вы сможете проанализировать.

Файлы папок результатов

675B09EE-5DE8-4AF5-B10D-07DB894902D2.Diagnose.0.etl
DebugReport.xml
NetworkConfiguration.cab
ResultReport.xml
results.xsl


Поместите все это в пакетный файл

Примечание. Это предполагает, что файл ответов уже настроен и находится в удобочитаемом месте для использования командлетом Invoke-TroubleshootingPack , так что это то, что вы создаете с помощью шага №1 выше.Кроме этого, вам нужно только установить значения AnswerFile= и DiagFolder= в качестве допустимых местоположений, в которые вы можете писать.

@ECHO OFF

SET "AnswerFile=C:\Folder\Path\AudioAnswerFile.xml"
SET "DiagFolder=C:\Folder\Path\Diag"

CALL :PowerShell
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'"

:PowerShell
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
SET PSScript=%temp%\~tmpNtwkDiagTrblsht.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO $aFile = "%AnswerFile%">"%PSScript%"
ECHO $dFolder = "%DiagFolder%">>"%PSScript%"
ECHO $var = Get-TroubleshootingPack -Path "C:\Windows\diagnostics\system\Networking">>"%PSScript%"
ECHO Invoke-TroubleshootingPack -Pack $var -AnswerFile $aFile -Unattended -Result $dFolder>>"%PSScript%"
GOTO :EOF

Дальнейшая проверка

После запуска этого процесса вы должны увидеть в средстве просмотра событий Windows системного журнала и код события 4100 из источника «Diagostics-Neworking» с сообщением "Уровень информации", указывающим

« Система диагностики сети завершила этап диагностики, но не обнаружила проблем с сетью ».


Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .