【问题标题】:Assistance needed with vbs to change Admin Accountvbs 需要帮助来更改管理员帐户
【发布时间】:2014-06-10 21:24:41
【问题描述】:

我的任务是创建一个 vbs 来执行以下操作: 如果 NewAdmin 存在,则为 NewAdmin 设置密码并禁用本地管理员帐户 否则将本地管理员帐户重命名为 NewAdmin 并设置密码。

再次感谢您的快速回复。我已经相应地更改了下面的代码,现在正在尝试使用 Windows 脚本编码器来混淆密码。我知道仍然存在风险,因为这可能会被解码,但脚本不会存储在用户的计算机上,因此不会构成太大的威胁。

代码现在显示了 Windows 脚本编码器完成工作所需的三个添加行,但我无法让它工作。我从命令行运行以下命令:

screnc /l vbscript admin_script.vbs admin_script.vbe

它成功创建了 admin_script.vbe。但是当我尝试运行编码脚本时,它会显示以下错误消息:

Script:    C:\...\admin_script.vbe
Line:      2
Char:      1
Error:     Expected Statement
Code:      800A0400
Source:    Microsoft VBscript compilation error

未编码的脚本运行没有问题。我尝试了另一种方法来使用我在网上找到的 vbscript 对数据进行编码,但它做同样的事情......混淆了数据,但脚本在后面不起作用。我还读到这可能是一个编码问题,我需要将 vbs 保存为没有 BOM 的 UTF-8,但这也不起作用。

如果有人知道如何让这个 Windows 脚本编码器工作,我将不胜感激。此外,如果有另一种加密/混淆代码的方法,欢迎提出任何建议。我会说我不是从 VBS 创建可执行文件的忠实粉丝,但如有必要,我会诉诸于此。

<SCRIPT LANGUAGE="VBScript">
'**Start Encode**
OPTION EXPLICIT
DIM objNetwork, objUser, objComputer
DIM strPassword, strAdminUserName, strNewAdminUserName, strComputer, strUser

' Get Computer Name and make it all uppercase
SET objNetwork = CREATEOBJECT("Wscript.Network")
strComputer = UCASE(objNetwork.ComputerName)
' Setting veriable for IF statement
strUser= "NewAdmin"
' The old name of the administrator user account (normally administrator)
strAdminUserName = "Administrator"
' The new name of the administrator user account
strNewAdminUserName = "NewAdmin"
' New Password for administrator account.
strPassword = "passwordhere"

On Error Resume Next
Set objUser = GetObject("WinNT://" & strComputer & "/" & strUser & ",user")
If (Err.Number = 0) Then
  On Error GoTo 0
    ' Set password of admin user account
    setPWD strComputer,strNewAdminUserName,strPassword
    ' Disable Local Administrator account
    Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
    objUser.AccountDisabled = True
    objUser.SetInfo  
Else
  On Error GoTo 0
    ' Rename admin user account
    renameUser strComputer,strAdminUserName,strNewAdminUserName
    ' Set password of admin user account
    setPWD strComputer,strNewAdminUserName,strPassword  
End If

' enter code hereReset password for a local user account on a given computer
SUB setPWD(strComputer,strUser,strPassword)

    DIM objUser
    ' Ignore error if user account isn't found or error changing password
    ON ERROR RESUME NEXT 
    SET objUser = GETOBJECT("WinNT://" & strComputer & "/" & strUser & ",user")
    IF err.number = 0 THEN
        objUser.SetPassword strPassword
        objUser.SetInfo
    END IF
    ON ERROR GOTO 0

END SUB

' Rename a local user account on a given computer
SUB renameUser(strComputer,strFromName, strToName)

    DIM objComputer,objUser
    ' Ignore error if user account isn't found or error moving user
    ON ERROR RESUME NEXT
    SET objComputer = GETOBJECT("WinNT://" & strComputer)
    SET objUser = GETOBJECT("WinNT://" & strComputer & "/" & strFromName & ",user")
    IF err.number = 0 THEN
        objComputer.MoveHere objUser.ADsPath,strToName
    END IF
    ON ERROR GOTO 0

END SUB
</SCRIPT>

【问题讨论】:

  • 删除 On Error Resume Next 并检查您遇到的错误。此外,WMI 可能是一种更简单的方法来做你想做的事。然而,系统管理 PoV 的最佳解决方案是组策略。
  • 我在研究时看到了使用组策略首选项的建议,并希望我们可以使用 GPP,但我们的服务器团队有很多事情要做,我不确定他们是否有时间/或会愿意完成工作。
  • 他们应该。组策略让他们的生活更轻松,给予他们更好/集中的控制权。

标签: login vbscript admin


【解决方案1】:

改一下

If (Err.Number <> 0) Then

到这里

If (Err.Number = 0) Then

【讨论】:

  • 哇!简单的改变,但它看起来可能已经完成了这项工作。如果时间允许,我会做进一步的测试,但非常感谢您的回复。
猜你喜欢
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多