<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: wmi code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 08:11:14 GMT</pubDate>
    <description>DZone Snippets: wmi code</description>
    <item>
      <title>Get username of logged in remote user, vb.net Win32_ComputerSystem Version</title>
      <link>http://snippets.dzone.com/posts/show/5478</link>
      <description>// description of your code here&lt;br /&gt;This is an even shorter method of getting the remote user through WMI&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Imports System.Management&lt;br /&gt;Imports System.DirectoryServices&lt;br /&gt;Imports Microsoft.Win32&lt;br /&gt;Imports System.Runtime.InteropServices&lt;br /&gt;Module Module1&lt;br /&gt;    Dim objManagementClass As ManagementClass&lt;br /&gt;    Dim objManagementScope As ManagementScope&lt;br /&gt;    Dim objManagementBaseObject As ManagementBaseObject&lt;br /&gt;    Public Strcomputer As String = ""&lt;br /&gt;    Sub Main()&lt;br /&gt;&lt;br /&gt;        Dim WMIScope As Management.ManagementScope&lt;br /&gt;        Dim WMIConnectionOptions As New Management.ConnectionOptions&lt;br /&gt;        Dim strRootDomain As String&lt;br /&gt;        Dim objRootLDAP As DirectoryEntry&lt;br /&gt;        Dim query As ManagementObjectSearcher&lt;br /&gt;        Dim queryCollection As ManagementObjectCollection&lt;br /&gt;        Dim oq As New System.Management.ObjectQuery&lt;br /&gt;        Dim mo As New ManagementObject&lt;br /&gt;        Dim UserDomain As String&lt;br /&gt;        Dim UserID As String&lt;br /&gt;        Dim StrLoggedUserSID() As Byte&lt;br /&gt;&lt;br /&gt;        Try&lt;br /&gt;&lt;br /&gt;            Dim Strcomputer As String = My.Application.CommandLineArgs.Item(0)&lt;br /&gt;&lt;br /&gt;            With WMIConnectionOptions&lt;br /&gt;                .Impersonation = System.Management.ImpersonationLevel.Impersonate&lt;br /&gt;                .Authentication = System.Management.AuthenticationLevel.Packet&lt;br /&gt;&lt;br /&gt;            End With&lt;br /&gt;&lt;br /&gt;            WMIScope = New Management.ManagementScope("\\" &amp; _&lt;br /&gt;            Strcomputer &amp; "\root\cimv2", WMIConnectionOptions)&lt;br /&gt;&lt;br /&gt;            objRootLDAP = New DirectoryEntry("LDAP://RootDSE")&lt;br /&gt;            strRootDomain = objRootLDAP.Properties.Item("rootDomainNamingContext").Value.ToString&lt;br /&gt;&lt;br /&gt;            oq = New System.Management.ObjectQuery("SELECT UserName from Win32_ComputerSystem")&lt;br /&gt;            query = New ManagementObjectSearcher(WMIScope, oq)&lt;br /&gt;            queryCollection = query.Get()&lt;br /&gt;&lt;br /&gt;            For Each oReturn As ManagementObject In queryCollection&lt;br /&gt;&lt;br /&gt;                If Not oReturn("UserName") Is Nothing Then&lt;br /&gt;                    Console.WriteLine(oReturn("UserName").ToString)&lt;br /&gt;                Else&lt;br /&gt;                    Console.WriteLine("Not logged in")&lt;br /&gt;                End If&lt;br /&gt;&lt;br /&gt;            Next&lt;br /&gt;&lt;br /&gt;        Catch ex As Exception&lt;br /&gt;&lt;br /&gt;            Console.WriteLine(ex.ToString)&lt;br /&gt;&lt;br /&gt;        End Try&lt;br /&gt;&lt;br /&gt;    End Sub&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 08 May 2008 21:36:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5478</guid>
      <author>mellerbeck (Michael Ellerbeck)</author>
    </item>
    <item>
      <title>Get uptime of remote computer using WMI</title>
      <link>http://snippets.dzone.com/posts/show/5472</link>
      <description>// description of your code here&lt;br /&gt;Get uptime of remote computer using WMI, I'm not sure the convert time function is correct, it gives different results than psinfo.exe&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;Private Function GetUptime() As String&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        Dim WMIScope As Management.ManagementScope&lt;br /&gt;        Dim WMIConnectionOptions As New Management.ConnectionOptions&lt;br /&gt;        Dim strRootDomain As String&lt;br /&gt;        Dim objRootLDAP As DirectoryEntry&lt;br /&gt;        Dim query As ManagementObjectSearcher&lt;br /&gt;        Dim queryCollection As ManagementObjectCollection&lt;br /&gt;        Dim oq As New System.Management.ObjectQuery&lt;br /&gt;        Dim mo As New ManagementObject&lt;br /&gt;        Dim perftimestamp As String = ""&lt;br /&gt;        Dim perttimefreq As String = ""&lt;br /&gt;        Dim counter As String = ""&lt;br /&gt;        Dim iUptimeInSec As Long = 0&lt;br /&gt;&lt;br /&gt;        With WMIConnectionOptions&lt;br /&gt;            .Impersonation = System.Management.ImpersonationLevel.Impersonate&lt;br /&gt;            .Authentication = System.Management.AuthenticationLevel.Packet&lt;br /&gt;&lt;br /&gt;        End With&lt;br /&gt;&lt;br /&gt;        WMIScope = New Management.ManagementScope("\\" &amp; _&lt;br /&gt;        Strcomputer &amp; "\root\cimv2", WMIConnectionOptions)&lt;br /&gt;&lt;br /&gt;        objRootLDAP = New DirectoryEntry("LDAP://RootDSE")&lt;br /&gt;        strRootDomain = objRootLDAP.Properties.Item("rootDomainNamingContext").Value.ToString&lt;br /&gt;&lt;br /&gt;        oq = New System.Management.ObjectQuery("select * from Win32_PerfRawData_PerfOS_System")&lt;br /&gt;        query = New ManagementObjectSearcher(WMIScope, oq)&lt;br /&gt;        queryCollection = query.Get()&lt;br /&gt;&lt;br /&gt;        For Each oReturn As ManagementObject In queryCollection&lt;br /&gt;            perftimestamp = oReturn("Timestamp_Object").ToString()&lt;br /&gt;            perttimefreq = oReturn("Frequency_Object").ToString()&lt;br /&gt;            counter = oReturn("SystemUpTime").ToString()&lt;br /&gt;        Next&lt;br /&gt;&lt;br /&gt;        ' Calculation in seconds:&lt;br /&gt;        iUptimeInSec = Convert.ToInt64((Double.Parse(perftimestamp) - Double.Parse(counter)) / Double.Parse(perttimefreq))&lt;br /&gt;&lt;br /&gt;        ' convert the seconds&lt;br /&gt;        Return ConvertTime(iUptimeInSec)&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;    Private Function ConvertTime(ByVal seconds As Long) As String&lt;br /&gt;&lt;br /&gt;        Dim ConvSec As Long&lt;br /&gt;        Dim ConvMin As Long&lt;br /&gt;        Dim ConvHour As Long&lt;br /&gt;        Dim ConvDays As Long&lt;br /&gt;&lt;br /&gt;        Math.DivRem(seconds, 60, ConvSec)&lt;br /&gt;&lt;br /&gt;        Math.DivRem(seconds, 3600, ConvMin)&lt;br /&gt;        ConvMin = ConvMin / 60&lt;br /&gt;&lt;br /&gt;        Math.DivRem(seconds, (3600 * 24), ConvHour)&lt;br /&gt;        ConvHour = ConvHour / 3600&lt;br /&gt;&lt;br /&gt;        ConvDays = (seconds / (3600 * 24))&lt;br /&gt;&lt;br /&gt;        Return (ConvDays.ToString() + " days " + ConvHour.ToString() + " hours " + ConvMin.ToString() + " minutes " + ConvSec.ToString() + " seconds ")&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;'or you could try this method which still doesn't match psinfo or systeminfo but it is closer&lt;br /&gt;&lt;br /&gt;Private Function GetUptime2() As String&lt;br /&gt;&lt;br /&gt;        Dim WMIScope As Management.ManagementScope&lt;br /&gt;        Dim WMIConnectionOptions As New Management.ConnectionOptions&lt;br /&gt;        Dim strRootDomain As String&lt;br /&gt;        Dim objRootLDAP As DirectoryEntry&lt;br /&gt;        Dim query As ManagementObjectSearcher&lt;br /&gt;        Dim queryCollection As ManagementObjectCollection&lt;br /&gt;        Dim oq As New System.Management.ObjectQuery&lt;br /&gt;        Dim mo As New ManagementObject&lt;br /&gt;        Dim perftimestamp As String = ""&lt;br /&gt;        Dim perttimefreq As String = ""&lt;br /&gt;        Dim counter As String = ""&lt;br /&gt;        Dim iUptimeInSec As Long = 0&lt;br /&gt;        Dim LastBootUpTime As DateTime&lt;br /&gt;        Dim dateNow As DateTime = Date.Now&lt;br /&gt;&lt;br /&gt;        With WMIConnectionOptions&lt;br /&gt;            .Impersonation = System.Management.ImpersonationLevel.Impersonate&lt;br /&gt;            .Authentication = System.Management.AuthenticationLevel.Packet&lt;br /&gt;&lt;br /&gt;        End With&lt;br /&gt;&lt;br /&gt;        WMIScope = New Management.ManagementScope("\\" &amp; _&lt;br /&gt;        Strcomputer &amp; "\root\cimv2", WMIConnectionOptions)&lt;br /&gt;&lt;br /&gt;        objRootLDAP = New DirectoryEntry("LDAP://RootDSE")&lt;br /&gt;        strRootDomain = objRootLDAP.Properties.Item("rootDomainNamingContext").Value.ToString&lt;br /&gt;&lt;br /&gt;        oq = New System.Management.ObjectQuery("Select * from Win32_OperatingSystem")&lt;br /&gt;&lt;br /&gt;        query = New ManagementObjectSearcher(WMIScope, oq)&lt;br /&gt;        queryCollection = query.Get()&lt;br /&gt;&lt;br /&gt;        For Each oReturn As ManagementObject In queryCollection&lt;br /&gt;&lt;br /&gt;            LastBootUpTime = System.Management.ManagementDateTimeConverter.ToDateTime(oReturn("LastBootUpTime").ToString)&lt;br /&gt;            &lt;br /&gt;        Next&lt;br /&gt;&lt;br /&gt;        Dim ts As TimeSpan = dateNow.Subtract(LastBootUpTime)&lt;br /&gt;        Console.WriteLine(ts.Days.ToString + " days " + ts.Hours.ToString + " hours " + ts.Minutes.ToString + " minutes " + ts.Seconds.ToString + " seconds ")&lt;br /&gt;&lt;br /&gt;    End Function&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 07 May 2008 15:20:08 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5472</guid>
      <author>mellerbeck (Michael Ellerbeck)</author>
    </item>
    <item>
      <title>Using Ruby &amp; WMI to Get Win32 Process Information</title>
      <link>http://snippets.dzone.com/posts/show/4280</link>
      <description>From the &lt;a href="http://rubyonwindows.blogspot.com/"&gt;Ruby on Windows&lt;/a&gt; blog...&lt;br /&gt;&lt;br /&gt;Use Windows Management Instrumentation (WMI) to get information about the Win32 processes being run.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'win32ole'&lt;br /&gt;&lt;br /&gt;wmi = WIN32OLE.connect("winmgmts://")&lt;br /&gt;&lt;br /&gt;processes = wmi.ExecQuery("select * from win32_process")&lt;br /&gt;&lt;br /&gt;for process in processes do&lt;br /&gt;    puts "Name: #{process.Name}"&lt;br /&gt;    puts "CommandLine: #{process.CommandLine}"&lt;br /&gt;    puts "CreationDate: #{process.CreationDate}"&lt;br /&gt;    puts "WorkingSetSize: #{process.WorkingSetSize}"&lt;br /&gt;    puts&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Further details and discussion &lt;a href="http://rubyonwindows.blogspot.com/2007/07/using-ruby-wmi-to-get-win32-process.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Mon, 09 Jul 2007 03:03:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4280</guid>
      <author>dmullet (David Mullet)</author>
    </item>
    <item>
      <title>Using Ruby &amp; WMI to Detect a USB Drive</title>
      <link>http://snippets.dzone.com/posts/show/4152</link>
      <description>From the &lt;a href="http://rubyonwindows.blogspot.com"&gt;Ruby on Windows&lt;/a&gt; blog.&lt;br /&gt;&lt;br /&gt;How to use Windows Management Instrumentation (WMI) to determine if a "USB Mass Storage Device" is inserted.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'win32ole'&lt;br /&gt;&lt;br /&gt;wmi = WIN32OLE.connect("winmgmts://")&lt;br /&gt;&lt;br /&gt;devices = wmi.ExecQuery("Select * From Win32_USBControllerDevice")&lt;br /&gt;for device in devices do&lt;br /&gt;    device_name = device.Dependent.gsub('"', '').split('=')[1]&lt;br /&gt;    usb_devices = wmi.ExecQuery("Select * From Win32_PnPEntity Where DeviceID = '#{device_name}'")&lt;br /&gt;    for usb_device in usb_devices do&lt;br /&gt;        puts usb_device.Description&lt;br /&gt;        if usb_device.Description == 'USB Mass Storage Device'&lt;br /&gt;            # DO SOMETHING HERE&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Further details can be found &lt;a href="http://rubyonwindows.blogspot.com/2007/06/using-ruby-wmi-to-detect-usb-drive.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Sun, 17 Jun 2007 15:19:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4152</guid>
      <author>dmullet (David Mullet)</author>
    </item>
  </channel>
</rss>
