更改Wi-Fi配置文件的密码

时间:2016-01-21 22:41:20

标签: batch-file passwords wifi

在我自愿参加的长期护理医院,每个月的第一天,访客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

4 个答案:

答案 0 :(得分:4)

您是否尝试删除并重新添加配置文件,而不是仅仅更改XML的内容以使用普通密码?

我过去也有类似的情况,这对我有用:

此答案假定您只想在网络上保留WiFi密码而不是完整的XML,并且WiFi的SSID为&#34; My Network&#34;。

  1. 断开网络连接:netsh wlan disconnect
  2. 导出&#34;我的网络&#34;个人资料到其他地方,例如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。
  3. 在复制的配置文件中,确保protectedfalse,并使用普通密码填写keyMaterial(简单文本替换,应该很容易用VB或C#,但如果您只需要在批处理脚本中执行此操作,请参阅Changing tag data in an XML file using windows batch file
  4. 删除当前存储的个人资料:netsh wlan delete profile name="My Network"
  5. 添加个人资料:netsh wlan add profile filename="C:\Wi-Fi-My Network.xml"
    (这将使用加密密码在C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces中重新创建相应的文件。)
  6. 连接到网络:netsh wlan connect name="My Network"
  7. 如果您可以存储完整的XML,还可以导出未加密的配置文件(步骤2)并将其存储在网络驱动器中,然后您只需执行步骤1,4,5和6。

    我希望这会有所帮助。

答案 1 :(得分:1)

我通知密码的最佳逻辑方法是将密码保存为一个数字,并将每个月的wifi名称保留为+或 - “以前的密码” 通过这种方式,您可以通知患者一次下一个月的密码将是什么! :-) 例如:假设您当前的密码是134768 你的下个月密码是134778 然后在下个月的开始时你可以将wifi重命名为+ 10。

答案 2 :(得分:0)

似乎“FooBar”问了一个关于如何加密关键材料的问题但没有必要从我得到的东西,因为他提到“我成功地复制并粘贴了一个在计算机之间测试其中一个,它连接得很好,所以加密肯定是可逆的。“所以我猜你所要做的就是:

  1. 在员工电脑上输入无线密码
  2. 检查xml文件是否更新(如果是,则执行下一步)
  3. 然后将其放在多台计算机可以访问的网络上
  4. C&amp; P .xml文件并覆盖
  5. 祈祷你不需要重启它,否则我猜你可以禁用互联网驱动程序并从批量重新启用它
  6. 这是我的看法,但我现在无法真正测试它。

答案 3 :(得分:0)

您也可以编写一个使用

的批次

netsh wlan set profileparameter name="SSID" keyMaterial="password"

更新XML文档。 keyMaterial参数可以通过另一个.bat或其他文件的变量集传入。

当我的本地咖啡店决定每天更改密码时,我制作了这种方法,我厌倦了告诉Windows 10忘记网络并重新连接。