有多台win10机器需要修改密码和密码提示,为提高效率采取批量执行。记录下。
命令行示例为:
ssh -o connectTimeout=3 username@host "net user user_name new_password"
注:user_name是要修改密码的用户名,new_password是新密码。
对于多台机器,按上述做法,写成bat。
基本思路:密码提示需要在指定的注册表路径进行修改。比较麻烦的是,此路径不仅有固定值(和用户名无关),还有动态值(和用户名相关)。动态值需要先查找,再做进制转换,然后再搜索是哪个路径。找到此路径后,写入密码提示值便可。
- echo off
- rem 设定用户名与密码提示
- set os_user_name=xxxxxx
- set password_hint="password hint here"
-
- set regset_ini=regset_test.ini
- set regset_ini2=regset_test2.ini
-
- rem 赋予注册表权限
- echo HKEY_LOCAL_MACHINE\SAM\SAM [1 17] > %regset_ini%
- echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains [1 17] >> %regset_ini%
- echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [1 17] >> %regset_ini%
- echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [1 17] >> %regset_ini%
- echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [1 17] >> %regset_ini%
- echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\%os_user_name% [1 17] >> %regset_ini%
- regini %regset_ini%
-
- rem 找出用户名对应的type值
- set reg_user_name=
- set reg_user_name_num=
- for /f "tokens=3 delims=^ " %%i in ('reg query HKLM\SAM\SAM\Domains\Account\Users\Names\%os_user_name% /z ^| findstr /R [0-9]') do (set reg_user_name=%%i)
- set reg_user_name=%reg_user_name:(=%
- set reg_user_name_num=%reg_user_name:)=%
- echo reg_user_name_num is %reg_user_name_num%
-
- rem 将type值从10进制转16进制
- set tra=
- set str=
- set code=0123456789ABCDEF
- set reg_user_name_num_hex=%reg_user_name_num%
- :again
- set /a tra=%reg_user_name_num_hex%%%16
- call,set tra=%%code:~%tra%,1%%
- set /a reg_user_name_num_hex/=16
- set str=%tra%%str%
- if %reg_user_name_num_hex% geq 16 goto again
- set reg_user_name_num_hex=%reg_user_name_num_hex%%str%
- echo reg_user_name_num_hex is %reg_user_name_num_hex%
-
- rem 找出指定用户名对应的注册表路径
- set user_reg_path = reg query HKLM\SAM\SAM\Domains\Account\Users | findstr Users\0 | findstr /I %reg_user_name_num_hex%
- for /f "tokens=1 delims=^ " %%i in ('reg query HKLM\SAM\SAM\Domains\Account\Users ^| findstr Users\0 ^| findstr /I %reg_user_name_num_hex%') do (set user_reg_path=%%i)
- echo user_reg_path is %user_reg_path%
-
- rem 赋予注册表权限
- echo %user_reg_path% [1 17] > %regset_ini2%
- regini %regset_ini2%
-
- rem 增加password hint
- reg add %user_reg_path% /v UserPasswordHint /t REG_SZ /d %password_hint% /f
-
- del %regset_ini%
- del %regset_ini2%
- echo exection complete
-
- rem 删除bat自身
- del %0
将此内容保存成文件write_password_hint.bat,然后再利用scp上传到目标机器,然后利用ssh执行便可。
注意:1,将用户名和密码提示换成实际需求值。
2,最后会删除bat自身。本地测试时要注意备份。
执行示例:
ssh -o connectTimeout=3 username@host "d:\write_password_hint.bat"
参考
2 Ways to Set Password Hint for Windows User Account | Password Recovery
命令行修改注册表访问权限_crystal0011的博客-CSDN博客_命令行修改注册表权限
更改注册表值或权限 - Windows Client | Microsoft Docs
使用命令修改注册表键值及权限_weixin_33801856的博客-CSDN博客