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

Change the password for a Wi-Fi profile

在我做志愿者的长期护理医院,每个月的第一天,Guest Wi-Fi 连接的密码都会更改。这给工作人员带来了很多工作,也给患者带来了很多挫败感,其中许多患者的行动能力非常有限。

(是的,真正的解决方案是让 IT 团队保留相同的密码,但这不会发生)。

大多数患者通过 Windows 笔记本电脑与外界联系。我想创建一个批处理脚本,我们可以将其安装在他们的计算机上,该脚本将自动检索下个月的密码并在需要时立即应用。

我可以把下个月的访客密码放在医院内部网络的一个文件中,只有当前拥有这个月密码的人才能访问它,我可以在批处理脚本中使用 bitsadmin 来将密码检索到本地文件(见下文)。我可以在每个患者的计算机上设置一个任务,以便在月底前 运行 这个脚本。

我的问题是:当上个月的密码在新的月初失败时,如何从批处理脚本更改该网络连接的密码?

我知道我可以使用...

netsh wlan show profile name=“INSERT_SSID_HERE” key=clear

...找到当前密码,但我该如何设置?


编辑:我 found 在 Windows Vista 及更高版本中,Wi-Fi 密码存储在 XML 文件中 C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces[Interface Guid].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

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

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

此答案假设您只想在网络上保留 WiFi 密码而不是完整的 XML 并且 WiFi 的 SSID 是“My Network”。

  1. 断开网络:netsh wlan disconnect
  2. 将 "My Network" 配置文件导出到其他地方,例如C:\: netsh wlan export profile folder="C:\" name="My Network" key=clear --> 这应该创建 C:\Wi-Fi-My Network.xml。生成的 xml 文件应该类似于您在 C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces 中看到的文件,但 <sharedKey> 部分不受保护(这允许我们在下一步中只进行一个替换)。显然,您也可以通过从 Wlansvc 的配置文件目录复制文件来完成此操作,但这样做需要了解界面的 GUID。导出更容易,因为您只需要知道您的 SSID。
  3. 在复制的配置文件中,确保protectedfalsekeyMaterial填写明文密码(简单的文本替换,用[=应该很容易做到55=] 或 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"

如果您可以存储完整的 XML,您还可以导出未加密的配置文件(第 2 步)并将其存储在您的网络驱动器中,然后您只需执行第 1、4、5 步和 6.

希望对您有所帮助。

似乎“FooBar”问了一个论坛如何en/de加密密钥材料,但从我得到的信息来看没有必要这样做,因为他提到了"I successfully just copied and pasted a test one of these between computers, and it connected just fine, so the encryption is definitely reversible." 所以我猜你所要做的就是:

  1. 在员工电脑上输入无线密码
  2. 检查 xml 文件是否更新(如果更新则下一步)
  3. 然后放在多台电脑可以到达的网络上
  4. C&P .xml 文件并覆盖
  5. 祈祷你不需要重新启动它,否则我猜你可以禁用互联网驱动程序并从批处理中重新启用它

这就是我的看法,但我现在无法真正测试它。

我通知密码的最合乎逻辑的方法是每月将密码保持为数字并将 wifi 名称保持为 + 或 - "from the previous password" 通过这种方式,您可以一次性通知患者下个月的密码是什么! :-) 例如:假设您当前的密码是 134768 你下个月的密码是 134778 然后在下个月的月初,您可以将 wifi 重命名为 +ten。

您还可以编写一个批处理,利用

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

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

当我当地的咖啡店决定每天更改密码并且我厌倦了告诉 Windows10 忘记网络并重新连接时,我设计了这个方法。