145 lines
4.2 KiB
Lua
145 lines
4.2 KiB
Lua
--[[
|
|
Example Lua Object for using Windows Managment and Instrumentation via LuaCom
|
|
This object is meant to be used as a class to create other objects.
|
|
Contributed by Michael Cumming
|
|
--]]
|
|
|
|
require("luacom")
|
|
|
|
cWMI = {
|
|
New = function (self)
|
|
o = {}
|
|
setmetatable (o,self)
|
|
self.__index = self
|
|
return o
|
|
end,
|
|
|
|
Connect = function (self,computer,user,password)
|
|
computer = computer or "."
|
|
|
|
if not user then
|
|
self.oWMIService = luacom.GetObject ("winmgmts:{impersonationLevel=Impersonate}!\\\\" ..computer.. "\\root\\cimv2")
|
|
else
|
|
self.oWMIService = luacom.GetObject ( "winmgmts:\\\\" ..computer.. "\\root\\cimv2",user,password)
|
|
end
|
|
|
|
if not self.oWMIService then
|
|
return nil,"Failed to connect to computer "..computer
|
|
end
|
|
|
|
--refresher
|
|
self.oRefresher = luacom.CreateObject ("WbemScripting.SWbemRefresher")
|
|
self.oRefresher.AutoReconnect = 1
|
|
|
|
-- processor
|
|
self.refobjProcessor = self.oRefresher:AddEnum(self.oWMIService,"Win32_PerfFormattedData_PerfOS_Processor").ObjectSet
|
|
|
|
-- memory
|
|
self.refobjMemory = self.oRefresher:AddEnum(self.oWMIService,"Win32_PerfFormattedData_PerfOS_Memory").ObjectSet
|
|
|
|
--drive
|
|
self.refobjDisk = self.oRefresher:AddEnum(self.oWMIService,"Win32_PerfFormattedData_PerfDisk_LogicalDisk").ObjectSet
|
|
|
|
--network
|
|
self.refobjNetwork = self.oRefresher:AddEnum(self.oWMIService,"Win32_PerfFormattedData_Tcpip_NetworkInterface").ObjectSet
|
|
self.oRefresher:Refresh ()
|
|
|
|
local cWMISettings = self.oWMIService:ExecQuery ("Select * from Win32_WMISetting")
|
|
|
|
for index,item in luacomE.pairs (cWMISettings) do
|
|
self.ver = item:BuildVersion ()
|
|
end
|
|
|
|
return self.ver
|
|
end,
|
|
|
|
GetProcessorPercentTime = function (self)
|
|
self.oRefresher:Refresh ()
|
|
for index,item in luacomE.pairs (self.refobjProcessor) do
|
|
if item:Name () == "_Total" then
|
|
return item:PercentProcessorTime ()
|
|
end
|
|
end
|
|
return 0
|
|
end,
|
|
|
|
GetFreeMemory = function (self)
|
|
local x
|
|
self.oRefresher:Refresh ()
|
|
for index,item in luacomE.pairs (self.refobjMemory) do
|
|
x = item:AvailableMBytes ()
|
|
end
|
|
return x or 0
|
|
end,
|
|
|
|
GetFreeDiskSpace = function (self,drive)
|
|
local x,y
|
|
self.oRefresher:Refresh ()
|
|
for index,item in luacomE.pairs (self.refobjDisk) do
|
|
if item:Name () == drive then
|
|
x = item:FreeMegaBytes ()
|
|
y = item:PercentFreeSpace ()
|
|
return x,y
|
|
end
|
|
end
|
|
return 0,0
|
|
end,
|
|
|
|
GetNetworkInterfaceAll = function (self)
|
|
local item,BpsSent,BpsRec,BpsTot,bpsBandwidth
|
|
BpsSent,BpsRec,BpsTot,bpsBandwidth = 0,0,0,0
|
|
for index,item in luacomE.pairs (self.refobjNetwork) do
|
|
BpsRec = BpsRec + item:BytesReceivedPerSec()
|
|
BpsSent = BpsSent + item:BytesSentPerSec()
|
|
BpsTot = BpsTot + item:BytesTotalPerSec()
|
|
bpsBandwidth = bpsBandwidth + item:CurrentBandwidth()
|
|
end
|
|
return BpsSent,BpsRec,BpsTot,bpsBandwidth
|
|
end,
|
|
|
|
CreateProcess = function (self,Process)
|
|
local objProcess = self.oWMIService:Get("Win32_Process")
|
|
return objProcess:Create (Process,nil,nil,nil)
|
|
end,
|
|
|
|
--[[ returns the following error codes
|
|
0 Successful completion
|
|
2 Access denied
|
|
3 Insufficient privilege
|
|
8 Unknown failure
|
|
9 Path not found
|
|
21 Invalid parameter ]]
|
|
|
|
TerminateProcess = function (self,Process)
|
|
local colProcesses = self.oWMIService:ExecQuery("select * from Win32_Process where Name=\""..Process.."\"",nil,48)
|
|
local i
|
|
for index,item in luacomE.pairs (colProcesses) do
|
|
i = (i or 0) + 1
|
|
item:Terminate ()
|
|
end
|
|
return i
|
|
end,
|
|
|
|
ExistProcess = function (self,Process)
|
|
local colProcesses = self.oWMIService:ExecQuery("select * from Win32_Process where Name=\""..Process.."\"",nil,48)
|
|
local i
|
|
for index,item in luacomE.pairs (colProcesses) do
|
|
i = (i or 0) + 1
|
|
end
|
|
return i
|
|
end
|
|
}
|
|
|
|
localWMI = cWMI:New ()
|
|
|
|
localWMI:Connect (".") -- connect to local machine using current user credentials
|
|
|
|
print (localWMI.ver)
|
|
print (localWMI:GetProcessorPercentTime ())
|
|
print (localWMI:GetFreeMemory ())
|
|
print (localWMI:GetNetworkInterfaceAll ())
|
|
print (localWMI:GetFreeDiskSpace ("C:"))
|
|
print (localWMI:CreateProcess ("notepad.exe"))
|
|
print (localWMI:ExistProcess ("notepad.exe"))
|
|
print (localWMI:TerminateProcess ("notepad.exe"))
|