更改 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
”。
- 断开网络:
netsh wlan disconnect
- 将 "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。
- 在复制的配置文件中,确保
protected
为false
,keyMaterial
填写明文密码(简单的文本替换,用[=应该很容易做到55=] 或 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.
希望对您有所帮助。
似乎“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." 所以我猜你所要做的就是:
- 在员工电脑上输入无线密码
- 检查 xml 文件是否更新(如果更新则下一步)
- 然后放在多台电脑可以到达的网络上
- C&P .xml 文件并覆盖
- 祈祷你不需要重新启动它,否则我猜你可以禁用互联网驱动程序并从批处理中重新启用它
这就是我的看法,但我现在无法真正测试它。
我通知密码的最合乎逻辑的方法是每月将密码保持为数字并将 wifi 名称保持为 + 或 - "from the previous password"
通过这种方式,您可以一次性通知患者下个月的密码是什么! :-)
例如:假设您当前的密码是 134768
你下个月的密码是 134778
然后在下个月的月初,您可以将 wifi 重命名为 +ten。
您还可以编写一个批处理,利用
netsh wlan set profileparameter name="SSID" keyMaterial="password"
更新 XML 文档。 keyMaterial 参数可以通过来自另一个 .bat 或其他文件的变量集传入。
当我当地的咖啡店决定每天更改密码并且我厌倦了告诉 Windows10 忘记网络并重新连接时,我设计了这个方法。
在我做志愿者的长期护理医院,每个月的第一天,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
”。
- 断开网络:
netsh wlan disconnect
- 将 "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。 - 在复制的配置文件中,确保
protected
为false
,keyMaterial
填写明文密码(简单的文本替换,用[=应该很容易做到55=] 或 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.
希望对您有所帮助。
似乎“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." 所以我猜你所要做的就是:
- 在员工电脑上输入无线密码
- 检查 xml 文件是否更新(如果更新则下一步)
- 然后放在多台电脑可以到达的网络上
- C&P .xml 文件并覆盖
- 祈祷你不需要重新启动它,否则我猜你可以禁用互联网驱动程序并从批处理中重新启用它
这就是我的看法,但我现在无法真正测试它。
我通知密码的最合乎逻辑的方法是每月将密码保持为数字并将 wifi 名称保持为 + 或 - "from the previous password" 通过这种方式,您可以一次性通知患者下个月的密码是什么! :-) 例如:假设您当前的密码是 134768 你下个月的密码是 134778 然后在下个月的月初,您可以将 wifi 重命名为 +ten。
您还可以编写一个批处理,利用
netsh wlan set profileparameter name="SSID" keyMaterial="password"
更新 XML 文档。 keyMaterial 参数可以通过来自另一个 .bat 或其他文件的变量集传入。
当我当地的咖啡店决定每天更改密码并且我厌倦了告诉 Windows10 忘记网络并重新连接时,我设计了这个方法。