远程连接WMI windows10专业版配置
- win+r 输入 regedit 打开注册表编辑器
确认该路径HKEY_LOCAL_MACHINE→SOFTWARE→Microsoft→Ole→EnableDCOM的值是否为Y
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System看这个路径下是否有 32位类型为DWORD字段名为LocalAccountTokenFilterPolicy值为十六进制的1 没有则创建(需要手动创建,初始化的系统没有该值)
- 检查远程连接所用的用户是否具有权限
win + r 输入 dcomcnfg 打开 组件服务
在组件服务->计算机->我的电脑 右键属性 COM安全 栏 启动和激活权限 编辑默认值 添加用户并勾选所有权限
点击默认属性,勾选"在此计算机上启用分布式COM" ,默认身份验证级别为连接,默认模拟级别是模拟或标识。(window初始化后,默认属性配置是正确的不需要修改)
- 防火墙设置
直接关闭防火墙
端口135,139,或者445是否正常
- 测试配置是否成功
可以在另一台window win+r 输入wbemtest.exe打开Windows Management Instrumentation测试器
点击连接 在命名空间输入\192.169.204.132\root\cimv2,凭据下的用户名和密码输入被连接电脑的用户名和密码
点击连接,如果没有报错的话则配置成功
- 没有连接成功之后的检查项
Win+r 输入wmimgmt.msc 打开Windows管理体系结构控制台
右键点击WMI控制,选择属性 -> 安全 -> 安全设置。
添加用户 并勾选全部权限(该操作需要管理员权限)
按照4 步骤检查是否配置成功。
不成功则win+r输入services.msc 检查Remote Procedure Call (RPC),RemoteRegistry,Windows Management Instrumentation是否正在运行,没有运行的启动运行。(碰到被禁用的双击设置为手动在启动运行)
注意
目前网上有关Java连接wmi的 j-interop jar包不能连接成功。
使用python代码可以连接成功,window10专业版,window8可以连接成功
以下是python代码
import wmi
import codecs
def sys_version(ipaddress, user, password):
tmplist = {
}
try:
c = wmi.WMI(computer=ipaddress, user=user, password=password,debug=True)
# tmplist["cmptype"] = gettype(c)
# tmplist["ip"] = ipaddress
# tmplist["factory"] = getfactory(c)
# tmplist["cpus"] = getcpus(c)
# tmplist["cpuname"] = getcpuname(c)
# disks = []
# disks = getdisks(c)
# tmplist["alldisk"] = str(disks[0]) + "G"
# tmplist["usedisk"] = str(disks[1]) + "G"
# tmplist["diskp"] = str(disks[2]) + "%"
# mem = []
# mem = getmemory(c)
# tmplist["memory"] = mem[0]
# tmplist["pmem"] = mem[1]
# tmplist["hostnames"] = getcmpname(c)
# tmplist["domains"] = getdomain(c)
# tmplist["os"] = getsystemname(c)
# tmplist["86or64"] = getx86or64(c)
# cpuuse = []
# cpuuse = getcpuuse(c)
# tmplist["cpunum"] = cpuuse[0]
# tmplist["cpuuse"] = cpuuse[1]
# tmplist["sn"] = getsn(c)
# print(tmplist)
# wql = "SELECT * FROM Win32_NTLogEvent where TimeGenerated > '20220325062951.500448-000'"
# wql = "SELECT * FROM Win32_NTLogEvent"
# wql_r = c.query(wql)
# filenName = "localhost.txt"
# fileObject = codecs.open(filenName, "w", "utf-8")
# for line in wql_r:
# fileObject.write(line.__str__())
# fileObject.close()
# fileObject.write("--------------------------------------------------------------------------")
# wql = "SELECT * FROM Win32_DiskDrive"
# wql_r = c.query(wql)
# for line in wql_r:
# fileObject.write(line.__str__())
getApplication(c)
getSystem(c)
getSecurity(c)
for sys in c.Win32_OperatingSystem():
print ("Version:%s" % sys.Caption, "Vernum:%s" % sys.BuildNumber ) # 系统信息
print (sys.OSArchitecture.encode("UTF8")) # 系统的位数
print (sys.NumberOfProcesses ) # 系统的进程数
# filename = r"C:\test.bat" # 此文件在远程服务器上
# cmd_callbat = r"cmd /c call %s" % filename
# print(cmd_callbat)
# id, value =conn.Win32_Process.Create(CommandLine=cmd_callbat) # 执行bat文件 Win32_Process.Create
# print(id,value)
except Exception as e:
print (e)
print (e.com_error.strerror.encode("UTF8"))
# 获取windows日志应用日志
def getApplication(c):
try:
wql = 'SELECT * FROM Win32_NTLogEvent where Logfile = "Application"'
wql_r = c.query(wql