我想要一个用于解决网络断开和问题(例如,网络断开连接或网络出现问题)的虚拟紧急按钮,这样我就可以随时按下组合键,让计算机自动检测网络问题或重置适配器。
我在创建键盘快捷键时发现了这一点: 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 ==> 弹出一个交互式提示。我不想要交互式提示,我想弹出一个工具,它可以尽快开始修复网络连接,而无需人工干预。
如果问题仍然不清楚:我需要创建一个快捷方式或批处理来调用完全自动的网络修复,以便我可以将其链接到键盘快捷键。
答案1
下面是一个批处理脚本,它将模拟键盘敲击来操作标题为“网络连接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
更多资源
答案2
您可以使用电源外壳 Get-TroubleshootingPack Cmdlet指导您完成创建应答文件的过程,以便稍后使用调用-TroubleshootingPack Cmdlet实现自动化。
步骤:手动创建并运行
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
其余所有答案并按进入
应答文件内容
笔记:*现在您有了一个应答文件,您可以使用它来指向您可以自动化的作业或创建快捷方式以批处理方式运行,我将在下面详细讨论。
<?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
cmdlet 可利用的可读位置,因此这就是您使用上述步骤 #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 中看到事件查看器的系统记录和事件 ID4100
来自“Diagostics-Neworking”源,带有“信息级别”消息,表明
“网络诊断框架已完成运行的诊断阶段,但未发现网络问题。“