难以处理用于编辑本地用户帐户的批处理脚本,正在使用多个变量

时间:2019-01-08 09:21:23

标签: batch-file

我想将本地管理员密码更改为在整个环境中更安全的密码。问题在于环境的当前状态变化。在大多数情况下,标准管理员帐户会使用我想更新的弱密码全面启用。问题是,在某些情况下,默认管理员帐户被禁用,并创建了一个名为“ admin”的新帐户。

然后,使事情变得更复杂的是,还有一个本地帐户应该是称为“用户”的标准用户,但是我知道在某些地方,在不应该使用的地方,也已经成为管理员,在其他地方它根本没有被创建。

此后,我在构建/部署过程中对这些帐户的创建进行了标准化和自动化,因此所有新计算机都将使用正确的设置进行淘汰:

  • 启用默认本地管理员帐户“。\ administrator”,并使用安全密码

  • 具有正常强度密码的标准本地帐户“用户”

但是为了使我们的其他环境与此保持一致,我试图编写一个脚本来执行以下操作:

  1. 检查是否已启用默认的本地管理员帐户
  2. 如果是这样,请将密码设置为新的更安全的密码(少数设备已经正确设置了密码,但是可以)。如果没有,请启用
  3. 检查是否存在名为“ admin”的帐户
  4. 如果有,请将其删除。如果没有,那很好
  5. 检查“用户”帐户是否存在
  6. 如果确实存在,请以标准用户身份创建。如果不存在,请确保它不是本地管理员

我很乐意用网络用户命令来完成大多数这些事情,但是它将它们与我正在努力的条件逻辑一起串入脚本中。一直在寻找/ F循环,但不确定这是最好的方法吗?

真的很感谢朝着正确方向的观点。即使只是建议阅读哪些命令。谢谢

1 个答案:

答案 0 :(得分:0)

通常我不支持非主题性的问题,但是新年仍然很新鲜。我不确定您为什么要为此使用批处理,因为还有很多更好的方法,例如执行此操作的策略,但是无论如何,这里是这样:

@echo off
for /f %i in ('net user') do (
     if /i "%%i"=="user" echo net user %%i /delete
     echo net user user /add SomePassword
     if /i "%%i"=="admin" echo net user %%i /delete
     if /i "%%i"=="administrator" echo net user %%i NewPassword99
)

这可能不是您所需要的一切,但问题不在主题之列,我只是在引导您前进。

for循环仅将每个空格(空格/制表符/换行符)分隔的单词分配给令牌%%i。无需检查用户user的权限,而可以删除并重新创建它。然后检查管理员,将其删除并检查管理员密码。您可以从那里添加,修改想要的内容。

对结果满意后,请删除循环中字符串中的每个echo语句以执行实际的net user命令,这是在屏幕上显示如果运行该命令会发生的情况,这只是一种保障。