背景
有多台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博客