【发布时间】: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,但我们的服务器团队有很多事情要做,我不确定他们是否有时间/或会愿意完成工作。
-
他们应该。组策略让他们的生活更轻松,给予他们更好/集中的控制权。