You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用win32com远程连接Windows后改密码失败,报错'int' object is not callable

解决win32com远程修改Windows账户密码的问题

你遇到的'int' object is not callable错误,是因为Win32_Process.Create方法的调用方式不正确,同时返回值处理也有问题。以下是两种可行的解决方案:

方法1:修正Win32_Process.Create调用

直接调整参数传递和返回值处理逻辑,修复执行net user命令的方式:

locator = win32com.client.Dispatch("WbemScripting.SWbemLocator")
wmi_service = locator.ConnectServer(remote_computer, "root\\cimv2", username, password)
process_class = wmi_service.Get("Win32_Process")
cmd = f'net user "{username}" "{new_password}"'

# 按Win32_Process.Create的参数顺序传递:CommandLine, CurrentDirectory, ProcessStartupInfo, ProcessId
result, process_id = process_class.Create(cmd, None, None)

if result == 0:
    print(f"{remote_computer}上的{username}密码修改成功。")
else:
    print(f"{remote_computer}上的{username}密码修改失败,错误代码:{result}")

注意事项

  • 连接远程WMI的账号必须拥有目标计算机的管理员权限
  • 若目标系统开启UAC,可能需要调整远程WMI的UAC权限设置,否则命令执行会失败

方法2:使用Win32_UserAccount.SetPassword(推荐)

直接调用WMI内置的用户账户修改方法,比执行命令更可靠、更符合WMI操作规范:

locator = win32com.client.Dispatch("WbemScripting.SWbemLocator")
wmi_service = locator.ConnectServer(remote_computer, "root\\cimv2", username, password)

# 查询目标用户账户(域环境下需将Domain改为域名)
user_query = f"SELECT * FROM Win32_UserAccount WHERE Name='{username}' AND Domain='{remote_computer}'"
user_accounts = wmi_service.ExecQuery(user_query)

if not user_accounts:
    print(f"未找到{remote_computer}上的用户{username}")
else:
    user = user_accounts[0]
    result = user.SetPassword(new_password)
    if result == 0:
        print(f"{remote_computer}上的{username}密码修改成功。")
    else:
        print(f"{remote_computer}上的{username}密码修改失败,错误代码:{result}")

错误原因说明

你之前的代码中,process.Create(command=cmd)的命名参数写法不符合win32com对WMI方法的调用规范,导致参数解析错误,触发'int' object is not callable异常;同时result, = ...的返回值解构方式也不正确,Win32_Process.Create会返回错误码和进程ID两个值,需要用两个变量接收。

内容的提问来源于stack exchange,提问作者user27731119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:22:44