找回密码
 加入
搜索
查看: 5615|回复: 15

[网络通信] 【已解决】关于修改用户密码的报错信息

[复制链接]
发表于 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),求指点,谢谢!
由于有不可控的因素,目前已不用此方法了。感谢各位的指点,学到了不少东西,谢谢各位
发表于 2019-12-29 20:47:18 | 显示全部楼层
...
If Not  IsObj($oUser) Then Exit MsgBox(48, '', '获取对象出错')
$oUser.SetPassword($Password)
...

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 很给力!

查看全部评分

发表于 2019-12-29 13:19:07 | 显示全部楼层
#AutoIt3Wrapper_UseX64 = n   试过吗
 楼主| 发表于 2019-12-29 13:47:00 | 显示全部楼层
229989799 发表于 2019-12-29 13:19
#AutoIt3Wrapper_UseX64 = n   试过吗

感谢回复,有效果,我又同时编译了32和64位2个exe,32不报错,64的报错。
但有个问题搞不懂,在64位系统下运行不是应该编译成64位吗?不知道是什么原因
 楼主| 发表于 2019-12-29 13:51:28 | 显示全部楼层
#AutoIt3Wrapper_UseX64 = n或编译成32位exe也不行,虽然不报错了,但是程序 未正常运行。
发表于 2019-12-29 17:02:34 | 显示全部楼层
$sDCName 应该是 @ComputerName
发表于 2019-12-29 17:06:44 | 显示全部楼层
$username="administrator"
$Password ="123456"
$oUser = ObjGet("WinNT://" & @ComputerName & "/" & $UserName & ",User");
$oUser.SetPassword($Password)
 楼主| 发表于 2019-12-29 19:56:19 | 显示全部楼层

感谢回复,您这个代码是没问题的,我在虚拟机上测试也没问题,但就是在目标计算机上出现开头所描述的错误提示。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')
发表于 2019-12-29 20:11:52 | 显示全部楼层
本帖最后由 afan 于 2019-12-29 20:13 编辑

不是 SetPassword 的写法问题,提示是对象没成功获取,所以是 ObjGet 的问题要避免程序出错,应加上 If IsObj()... 再 Set
 楼主| 发表于 2019-12-29 20:43:57 | 显示全部楼层
afan 发表于 2019-12-29 20:11
不是 SetPassword 的写法问题,提示是对象没成功获取,所以是 ObjGet 的问题要避免程序出错,应加上 If IsO ...

您说的非常有道理,请教下如果使用if 判断objget?
$oUser的值用msgbox好象无法显示
 楼主| 发表于 2019-12-29 20:46:09 | 显示全部楼层
本帖最后由 anythinging 于 2019-12-29 20:47 编辑

If $oUser <> '' then $oUser.SetPassword($Password)
不知这样对不?不知如何显示 $oUser的值
 楼主| 发表于 2019-12-29 20:59:55 | 显示全部楼层
afan 发表于 2019-12-29 20:47
...
If Not  IsObj($oUser) Then Exit MsgBox(48, '', '获取对象出错')
$oUser.SetPassword($Password)

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

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

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30 赞一个!

查看全部评分

发表于 2019-12-29 22:51:12 | 显示全部楼层
其实问题还是没解决的,为什么会产生对象没成功获取
发表于 2019-12-30 15:22:38 | 显示全部楼层
修改密码有很多方式,比如命令行
net user  [用户名]   [密码]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-27 04:05 , Processed in 0.078729 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表