批处理修改win10密码以及密码提示

这篇博客介绍了如何通过批处理脚本来批量修改多台Win10机器的用户密码和密码提示。首先,使用ssh命令行工具配合netuser命令修改密码。接着,详细阐述了如何在注册表中找到并修改特定用户的密码提示,包括查找动态值、进行10进制到16进制转换,并使用reg命令写入新的密码提示。脚本最后会删除自身以保持整洁。注意在实际操作中要替换相应变量并备份脚本。
摘要由CSDN通过智能技术生成

背景

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

cmd10与16进制的相互转换_ak01_10的博客-CSDN博客_cmd 十六进制

bat脚本10进制数转16进制_book_rain的博客-CSDN博客_bat 十六进制

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值