anythinging 发表于 2019-12-28 22:59:41

【已解决】关于修改用户密码的报错信息

本帖最后由 anythinging 于 2019-12-31 08:42 编辑

各位大神,我用下面代码修改用户密码,遇到个问题。
                        Local $sDCName = "." ;
                        Local $oUser = ObjGet("WinNT://" & $sDCName & "/" & $UserName & ",User");
                        $oUser.SetPassword($Password)
在本机测试正常,但换了个电脑就有错误提示:
"C:\Program Files (x86)\AutoIt3\SciTE\=????????-???5.0-obj?????-???.au3" (741) : ==> ????? "Object".????.:
$oUser.SetPassword($Password)
$oUser^ ??

如果编译成exe文件,在自已的电脑上也能正常运行,但换了电脑提示:
AutoIt Error
Line 16757(File "C:\Users\administrator\Desktop\test.exe"):
Error: Variable must be of type "Object".

感觉像是这句的问题,$oUser.SetPassword($Password),求指点,谢谢!
由于有不可控的因素,目前已不用此方法了。感谢各位的指点,学到了不少东西,谢谢各位

afan 发表于 2019-12-29 20:47:18

...
If NotIsObj($oUser) Then Exit MsgBox(48, '', '获取对象出错')
$oUser.SetPassword($Password)
...

229989799 发表于 2019-12-29 13:19:07

#AutoIt3Wrapper_UseX64 = n   试过吗

anythinging 发表于 2019-12-29 13:47:00

229989799 发表于 2019-12-29 13:19
#AutoIt3Wrapper_UseX64 = n   试过吗

感谢回复,有效果,我又同时编译了32和64位2个exe,32不报错,64的报错。
但有个问题搞不懂,在64位系统下运行不是应该编译成64位吗?不知道是什么原因

anythinging 发表于 2019-12-29 13:51:28

#AutoIt3Wrapper_UseX64 = n或编译成32位exe也不行,虽然不报错了,但是程序 未正常运行。

skysmile 发表于 2019-12-29 17:02:34

$sDCName 应该是 @ComputerName

skysmile 发表于 2019-12-29 17:06:44

$username="administrator"
$Password ="123456"
$oUser = ObjGet("WinNT://" & @ComputerName & "/" & $UserName & ",User");
$oUser.SetPassword($Password)

anythinging 发表于 2019-12-29 19:56:19

skysmile 发表于 2019-12-29 17:06


感谢回复,您这个代码是没问题的,我在虚拟机上测试也没问题,但就是在目标计算机上出现开头所描述的错误提示。f5运行脚本时,能显示 第一个msgbox信息,不会显示 第二个msgbox信息,应该是在执行$oUser.SetPassword($Password)时出现问题。
我想:$oUser.SetPassword($Password)是否还有其它的写法

$username="administrator"
$Password ="123456"

$oUser = ObjGet("WinNT://" & @ComputerName & "/" & $UserName & ",User")
MsgBox(262144,'','1')
$oUser.SetPassword($Password)
MsgBox(262144,'','2')

afan 发表于 2019-12-29 20:11:52

本帖最后由 afan 于 2019-12-29 20:13 编辑

不是 SetPassword 的写法问题,提示是对象没成功获取,所以是 ObjGet 的问题要避免程序出错,应加上 If IsObj()... 再 Set

anythinging 发表于 2019-12-29 20:43:57

afan 发表于 2019-12-29 20:11
不是 SetPassword 的写法问题,提示是对象没成功获取,所以是 ObjGet 的问题要避免程序出错,应加上 If IsO ...

您说的非常有道理,请教下如果使用if 判断objget?
$oUser的值用msgbox好象无法显示

anythinging 发表于 2019-12-29 20:46:09

本帖最后由 anythinging 于 2019-12-29 20:47 编辑

If $oUser <> '' then $oUser.SetPassword($Password)
不知这样对不?不知如何显示 $oUser的值

anythinging 发表于 2019-12-29 20:59:55

afan 发表于 2019-12-29 20:47
...
If NotIsObj($oUser) Then Exit MsgBox(48, '', '获取对象出错')
$oUser.SetPassword($Password)


感谢指点!确实用了您的这句可以明显的看出确实是获取对象出错了,想问下$oUser正常是什么值,或者说如何查看它?

afan 发表于 2019-12-29 21:09:10

anythinging 发表于 2019-12-29 20:59
感谢指点!确实用了您的这句可以明显的看出确实是获取对象出错了,想问下$oUser正常是什么值,或者说如何 ...

用 IsObj($oUser) 就行了,正常就 IsObj($oUser) = 1

skysmile 发表于 2019-12-29 22:51:12

其实问题还是没解决的,为什么会产生对象没成功获取

zghwelcome 发表于 2019-12-30 15:22:38

修改密码有很多方式,比如命令行
net user[用户名]   [密码]
页: [1] 2
查看完整版本: 【已解决】关于修改用户密码的报错信息