在我自愿参加的长期护理医院,每个月的第一天,访客Wi-Fi连接的密码会发生变化。这给员工带来了很多工作,给患者带来了很多挫折感,其中很多人的行动能力非常有限。
(是的,真正的解决方案是让IT团队保持相同的密码,但这不会发生。)
大多数患者通过Windows笔记本电脑连接外部世界。我想创建一个我们可以在他们的计算机上安装的批处理脚本,它将自动检索下个月的密码并在需要时立即应用它。
我可以将下个月的访客密码放在医院内部网络的一个文件中,只有当前拥有本月密码的人才能访问该密码,我可以在批处理脚本中使用bitsadmin
来检索密码到本地文件(见下文)。我可以在每个病人的计算机上设置一个任务,以便在月末之前运行该脚本。
我的问题是:当上个月的密码在新月开始时失败时,如何从批处理脚本更改该网络连接的密码?
我知道我可以使用......
netsh wlan show profile name=“INSERT_SSID_HERE” key=clear
...找到当前密码,但我该如何设置呢?
编辑:我有found在Windows Vista及更高版本中,Wi-Fi密码短语存储在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces[Interface Guid].xml
的XML文件中。它以以下格式显示:
- <sharedKey>
<keyType>passPhrase</keyType>
<protected>true</protected>
<keyMaterial> ** 400+ hexit number ** </keyMaterial>
</sharedKey>
我猜测要更改密码,我需要使用适当的算法加密新密码并更新此XML文件。有没有可以用来自动执行此操作的命令?如果没有,我应该使用什么加密算法?
更简单的替代方法可能是删除加密:
<protected>false</protected>
<keyMaterial>plainTextPassword</keyMaterial>
但是,当我尝试在重新启动计算机后重新启动Wi-Fi连接时,使用已经过这种方式修改的XML文件,连接失败。
最好不需要重启的解决方案。
用于检索密码的批处理脚本:
@echo off
setlocal
set file=%~dp0result.txt
bitsadmin /reset
bitsadmin /create /download job
bitsadmin /addfile job http://example.com/password.html %file%
bitsadmin /resume job
timeout 5
bitsadmin /getstate job | find /i "TRANSFERRED" && goto :done
bitsadmin /cancel job
exit /b 1
:done
bitsadmin /complete job
:: results.txt now holds the new password
exit /b 0
答案 0 :(得分:4)
您是否尝试删除并重新添加配置文件,而不是仅仅更改XML的内容以使用普通密码?
我过去也有类似的情况,这对我有用:
此答案假定您只想在网络上保留WiFi密码而不是完整的XML,并且WiFi的SSID为&#34; My Network
&#34;。
netsh wlan disconnect
C:\
:netsh wlan export profile folder="C:\" name="My Network" key=clear
- &gt;这应该创建C:\Wi-Fi-My Network.xml
。生成的xml
文件应与您在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces
中看到的文件相似,但<sharedKey>
部分不受保护(这样我们只能在下一步中执行一次替换)。显然,您也可以通过从Wlansvc
的配置文件目录中复制文件来完成此操作,但这样做需要了解接口的GUID。导出更容易,因为您只需要知道您的SSID。protected
为false
,并使用普通密码填写keyMaterial
(简单文本替换,应该很容易用VB或C#,但如果您只需要在批处理脚本中执行此操作,请参阅Changing tag data in an XML file using windows batch file)netsh wlan delete profile name="My Network"
netsh wlan add profile filename="C:\Wi-Fi-My Network.xml"
。C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces
中重新创建相应的文件。)netsh wlan connect name="My Network"
如果您可以存储完整的XML,还可以导出未加密的配置文件(步骤2)并将其存储在网络驱动器中,然后您只需执行步骤1,4,5和6。
我希望这会有所帮助。
答案 1 :(得分:1)
我通知密码的最佳逻辑方法是将密码保存为一个数字,并将每个月的wifi名称保留为+或 - “以前的密码” 通过这种方式,您可以通知患者一次下一个月的密码将是什么! :-) 例如:假设您当前的密码是134768 你的下个月密码是134778 然后在下个月的开始时你可以将wifi重命名为+ 10。
答案 2 :(得分:0)
似乎“FooBar”问了一个关于如何加密关键材料的问题但没有必要从我得到的东西,因为他提到“我成功地复制并粘贴了一个在计算机之间测试其中一个,它连接得很好,所以加密肯定是可逆的。“所以我猜你所要做的就是:
这是我的看法,但我现在无法真正测试它。
答案 3 :(得分:0)
您也可以编写一个使用
的批次 netsh wlan set profileparameter name="SSID" keyMaterial="password"
更新XML文档。 keyMaterial参数可以通过另一个.bat或其他文件的变量集传入。
当我的本地咖啡店决定每天更改密码时,我制作了这种方法,我厌倦了告诉Windows 10忘记网络并重新连接。