Generador de Códigos de WMI, aplicación en formato HTA
Código para crear WMI Code Generator, que permite obtener códigos para crear archivos batch o scripts, para obtener información de la consola de WMI de Windows.
Comparto en esta página el código para crear una aplicación en formato HTA llamada WMI Code Generator.La página HTA así creada funciona como una aplicación, con la que se pueden generar código en varios formatos, para crear archivos batch, scripts en formato VBS, que permiten obtener información de WMIC (Consola de Windows Management Instrumentation).
Para crear la aplicación solo es necesario copiar y pegar el código en un archivo de texto plano y guardarlo con la extensión de archivo .HTA.
El código se puede editar y personalizar completamente para cambiar la apariencia de la aplicación.
La aplicación cuya versión es la 5.10, fue creada por Rob van der Woude, desde cuya web se puede descargar una versión más reciente en un archivo ejecutable.
Código para crear WMI Code Generator
<html>
<head>
<title>WMI Code Generator</title>
<HTA:APPLICATION
ID="WMIGen"
VERSION="5.10"
APPLICATIONNAME="WMI Code Generator"
SCROLL="yes"
SINGLEINSTANCE="yes"
WINDOWSTATE="maximize"
>
<style type="text/css">
<!--
a { color: blue; }
p { color: black; font-size: 80%; }
.Button { width: 12em; margin: 3px 1em 3px 1em; }
.Red { color: red; }
.White { color: white; }
-->
</style>
</head>
<script language="VBScript">
' Variable to set filter for classes shown
' If True then all classes are shown
' If False then only WIN32_* classes are shown
' Command line switch /WIN32 sets variable to False
Dim blnShowAllClasses
blnShowAllClasses = True
' Variable to set filter for Win32_Perf* classes
' If True then the Win32_Perf* classes are included
' If False then the Win32_Perf* classes are excluded
' Command line switch /NOPERF sets variable to False
Dim blnShowPerfClasses
blnShowPerfClasses = True
' Internet Explorer object to contain MSDN help pages
Dim objIEHelp
Sub ButtonState( blnCodeButtonsEnabled )
CodeLabel.InnerHTML = "Code:"
Code.title = "After pressing the 'Generate Code' button, the generated code to display the available properties and their values for the selected WMI class and scripting language will be shown here"
If blnCodeButtonsEnabled Then
CopyCodeButton.Disabled = True
CopyCodeButton.Title = ""
ClearCodeButton.Disabled = True
ClearCodeButton.Title = ""
RunCodeButton.Disabled = True
RunCodeButton.Title = ""
GenerateCodeButton.Disabled = False
GenerateCodeButton.Title = "Press this button to generate the code that will display the properties and their values for the selected WMI class, in the selected scripting language"
Else
CopyCodeButton.Disabled = False
CopyCodeButton.Title = "Press this button to copy the generated code to the clipboard"
ClearCodeButton.Disabled = False
ClearCodeButton.Title = "Press this button to erase the generated code"
RunCodeButton.Disabled = False
RunCodeButton.Title = "Press this button to run the generated (VBScript) code"
GenerateCodeButton.Disabled = True
GenerateCodeButton.Title = ""
End If
End Sub
Sub CheckUpdate( )
' Change mouse pointer to hourglass while checking for update
Document.Body.Style.Cursor = "wait"
strLatestVer = TextFromHTML( "http://www.robvanderwoude.com/updates/wmigen.txt" )
lenLatestVer = Len( strLatestVer )
If lenLatestVer = 4 Then
strCurrentVer = WMIGen.Version
If strLatestVer < strCurrentVer Then
Update.InnerHTML = "<p class=""White"">You seem to be using an invalid version (" & strCurrentVer _
& ") of the WMI Code Generator.<br>The latest valid version is " _
& strLatestVer & " and it is available " _
& "<a href=""http://www.robvanderwoude.com/wmigen.php"" class=""Red"">here</a>.</p>"
End If
If strLatestVer > strCurrentVer Then
Update.InnerHTML = "<p class=""White"">You are using version " & strCurrentVer _
& " of the WMI Code Generator.<br>An update to version " _
& strLatestVer & " is available " _
& "<a href=""http://www.robvanderwoude.com/wmigen.php"" class=""Red"">here</a>.</p>"
End If
End If
' Change mouse pointer back to default
Document.Body.Style.Cursor = "default"
End Sub
Sub CheckWindowSize( )
myWidth = Document.Body.ClientWidth
myHeight = Document.Body.ClientHeight
largeBoxWidth = CInt( myWidth / 9 )
smallBoxWidth = CInt( ( largeBoxWidth - 5 ) / 2 )
smallBoxHeight = CInt( myHeight / 100 )
codeBoxRows = CInt( myHeight / 50 )
If smallBoxHeight < 6 Then smallBoxHeight = 6
If codeBoxRows < 15 Then codeBoxRows = 15
Code.Cols = largeBoxWidth
Code.Rows = codeBoxRows
Properties.size = smallBoxHeight
Methods.size = smallBoxHeight
WMIClasses.size = smallBoxHeight
End Sub
Sub ClearCode( )
Code.Value = ""
ButtonState True
End Sub
Sub CopyCode( )
strCode = Code.Value
Document.ParentWindow.ClipboardData.SetData "text", strCode
End Sub
Sub CreateIEHelp( )
On Error Resume Next
objIEHelp.Close
On Error Goto 0
Set objIEHelp = Nothing
Set objIEHelp = CreateObject( "InternetExplorer.Application" )
objIEHelp.Navigate "about:blank"
objIEHelp.AddressBar = 1
objIEHelp.MenuBar = 1
objIEHelp.StatusBar = 1
objIEHelp.ToolBar = 1
objIEHelp.Top = 0
objIEHelp.Left = 0
objIEHelp.Width = 800
objIEHelp.Height = 600
objIEHelp.TheaterMode = 0
objIEHelp.Visible = 1
End Sub
Function CreateLine( strProperty )
' This subroutine will split up a string into separate words:
' "SCSILogicalUnit" will be converted to "SCSI Logical Unit"
On Error Resume Next
dim i, j, k, strPropDescr, strLowc, strCaps, strPad, chrA, chrB
strPropDescr = strProperty
strCaps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
strPad = " "
strLowc = LCase( strCaps )
i = 0
Do
i = i + 1
j = i + 1
If j >= Len( strPropDescr ) Then Exit Do
chrA = Mid( strPropDescr, i, 1 )
chrB = Mid( strPropDescr, j, 1 )
If InStr( strLowc, chrA ) > 0 And InStr( strCaps, chrB ) > 0 Then
strPropDescr = Left( strPropDescr, i ) & " " & Mid( strPropDescr, j )
i = i + 2
j = i + 1
End If
Loop
If Len( strPropDescr ) > 2 Then
i = 0
Do
i = i + 1
j = i + 1
k = i + 2
If k >= Len( strPropDescr ) Then Exit Do
chrA = Mid( strPropDescr, i, 1 )
chrB = Mid( strPropDescr, j, 1 )
chrC = Mid( strPropDescr, k, 1 )
If InStr( strCaps, chrA ) > 0 And InStr( strCaps, chrB ) > 0 And InStr( strLowc, chrC ) > 0 Then
strPropDescr = Left( strPropDescr, i ) & " " & Mid( strPropDescr, j )
i = i + 3
j = i + 1
k = i + 2
End If
Loop
End If
CreateLine = Left( strPropDescr & strPad, 31 ) & ":"
End Function
Sub FillClassDropDown( )
' Bubble sort algorithm found in Microsoft's Script Repository
' http://www.microsoft.com/technet/scriptcenter/resources/qanda/nov04/hey1122.mspx
Dim arrOptions( )
intSize = 0
' Change cursor to hourglass while loading WMI class list
Document.Body.Style.Cursor = "wait"
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root\cimv2" )
Set colClasses = objWMIService.SubClassesOf
' Store the list of classes in an array
For Each objClass In colClasses
' List only Win32_* classes if /WIN32 was used
If Left( UCase( objClass.Path_.Class ), 6 ) = "WIN32_" Or blnShowAllClasses Then
' Skip Win32_Perf* classes if /NOPERF was used
If Left( UCase( objClass.Path_.Class ), 10 ) <> "WIN32_PERF" Or blnShowPerfClasses Then
' Skip WMI systemm properties starting with a double underscore
If Left( objClass.Path_.Class, 2 ) <> "__" Then
ReDim Preserve arrOptions( intSize )
arrOptions( intSize ) = objClass.Path_.Class
intSize = intSize + 1
End If
End If
End If
Next
' Sort the classes
For i = ( UBound( arrOptions ) - 1 ) to 0 Step -1
For j= 0 to i
If UCase( arrOptions( j ) ) > UCase( arrOptions( j + 1 ) ) Then
strHolder = arrOptions( j + 1 )
arrOptions( j + 1 ) = arrOptions( j )
arrOptions( j ) = strHolder
End If
Next
Next
' Populate the classes list
For i = 0 To UBound( arrOptions )
Set objNewOption = document.createElement( "OPTION" )
If CInt( i / 2 ) <> ( i / 2 ) Then
objNewOption.style.backgroundcolor = "#F0F0F0"
End If
objNewOption.Text = arrOptions(i)
If i = 0 Then objNewOption.Selected = True
WMIClasses.options.Add( objNewOption )
Next
' Change cursor back to default
Document.Body.Style.Cursor = "default"
HandleClassChange
End Sub
Sub GetHelp( )
' Check which class is selected
For Each objOption In WMIClasses.options
If objOption.Selected = True Then
strClass = Trim( objOption.Text)
End If
Next
' Check which Property is selected, if any
strMember = ""
For Each objOption In Properties.options
If objOption.Selected = True Then
strMember = "+" & Trim( objOption.Text ) & "+property"
End If
Next
' Check which Method is selected, if any
For Each objOption In Methods.options
If objOption.Selected = True Then
strMember = "+" & Trim( objOption.Text ) & "+method"
End If
Next
' Google search techniques learned from
' http://www.seroundtable.com/archives/015944.html
strURLHelp = "http://www.google.com/search?q=" _
& strClass _
& strMember _
& "&site=msdn.microsoft.com&btnI=745&pws=0"
On Error Resume Next
objIEHelp.Navigate strURLHelp
If Err.Number Then
CreateIEHelp
objIEHelp.Navigate strURLHelp
End If
On Error Goto 0
objIEHelp.Visible = 1
End Sub
Sub HandleClassChange( )
Dim arrMethods( ), arrProperties( )
Dim intMethods, intProperties
' Purge the Methods list
For Each objOption in Methods.options
objOption.RemoveNode
Next
ReDim arrMethods( 0 )
intMethods = 0
' Purge the Properties list
For Each objOption in Properties.options
objOption.RemoveNode
Next
ReDim arrProperties( 0 )
intProperties = 0
' Change cursor to hourglass while loading the class' members lists
Document.Body.Style.Cursor = "wait"
For Each objOption In WMIClasses.Options
If objOption.Selected = True Then
strClass = objOption.Text
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( strClass )
' Store the list of methods in an array
For Each objMethod In objClass.Methods_
ReDim Preserve arrMethods( intMethods )
arrMethods( intMethods ) = objMethod.Name
intMethods = intMethods + 1
Next
' Store the list of properties in an array
For Each objProperty In objClass.Properties_
ReDim Preserve arrProperties( intProperties )
arrProperties( intProperties ) = objProperty.Name
intProperties = intProperties + 1
Next
If IsArray( arrMethods ) Then
' Sort the methods list
For i = ( UBound( arrMethods ) - 1 ) to 0 Step -1
For j= 0 to i
If UCase( arrMethods( j ) ) > UCase( arrMethods( j + 1 ) ) Then
strHolder = arrMethods( j + 1 )
arrMethods( j + 1 ) = arrMethods( j )
arrMethods( j ) = strHolder
End If
Next
Next
' Populate the Methods list
i = 0
For Each strOption in arrMethods
Set objNewOption = document.createElement( "OPTION" )
If CInt( i / 2 ) <> ( i / 2 ) Then
objNewOption.style.backgroundcolor = "#F0F0F0"
End If
objNewOption.Text = strOption
Methods.options.Add( objNewOption )
i = i + 1
Next
End If
If IsArray( arrProperties ) Then
' Sort the properties list
For i = ( UBound( arrProperties ) - 1 ) to 0 Step -1
For j= 0 to i
If UCase( arrProperties( j ) ) > UCase( arrProperties( j + 1 ) ) Then
strHolder = arrProperties( j + 1 )
arrProperties( j + 1 ) = arrProperties( j )
arrProperties( j ) = strHolder
End If
Next
Next
' Populate the Properties list
i = 0
For Each strOption in arrProperties
Set objNewOption = document.createElement( "OPTION" )
If CInt( i / 2 ) <> ( i / 2 ) Then
objNewOption.style.backgroundcolor = "#F0F0F0"
End If
objNewOption.Text = strOption
Properties.options.Add( objNewOption )
i = i + 1
Next
End if
End If
Next
' Change cursor back to default
Document.Body.Style.Cursor = "default"
Code.Value = ""
ButtonState True
End Sub
Sub HandleLanguageChange( )
ButtonState True
Code.Value = ""
End Sub
Sub RunCode( )
Dim colItems, objItem, objOption, objProperty, objWMIService
Dim strClass, strCode, strProperty
' Change mouse pointer to hourglass while running the code
Document.Body.Style.Cursor = "wait"
Code.Value = " . . . Please Wait . . ."
CodeLabel.InnerHTML = "Result:"
For Each objOption In WMIClasses.Options
If objOption.Selected = True Then
strClass = objOption.Text
End If
Next
Set objWMIService = GetObject( "winmgmts://" & strComputer )
Set colItems = objWMIService.InstancesOf( strClass )
On Error Resume Next
For Each objItem In colItems
For Each objProperty In objItem.Properties_
strProperty = objProperty.Name
strCode = strCode & CreateLine( strProperty ) & " "
If IsArray( objItem.Properties_.Item( strProperty, 0 ) ) Then
strCode = strCode & Join( objItem.Properties_.Item( strProperty, 0 ), ";" )
Else
strCode = strCode & objItem.Properties_.Item( strProperty, 0 )
End If
strCode = strCode & vbCrLf
Next
strCode = strCode & vbCrLf
Next
On Error Goto 0
Code.Value = strCode
Code.title = "After pressing the 'Generate Code' button again, the generated code to display the available properties and their values for the selected WMI class and scripting language will be shown here once more"
CopyCodeButton.Title = "Press this button to copy the result to the clipboard"
ClearCodeButton.Title = "Press this button to erase the result"
RunCodeButton.Disabled = True
RunCodeButton.Title = ""
GenerateCodeButton.Disabled = False
GenerateCodeButton.Title = "Press this button to generate the code that will display the properties and their values for the selected WMI class, in the selected scripting language"
' Change mouse pointer back to default
Document.Body.Style.Cursor = "default"
End Sub
Sub ShowCode( )
' Change mouse pointer to hourglass while running the code
Document.Body.Style.Cursor = "wait"
For Each objOption In WMIClasses.Options
If objOption.Selected = True Then
strClass = objOption.Text
End If
Next
Select Case CodeLanguage.Value
Case "Batch"
ShowBatchCode strClass
Case "CSharp"
ShowCSharpCode strClass
Case "JScript"
ShowJScriptCode strClass
Case "KiXtart"
ShowKiXtartCode strClass
Case "ObjectRexx"
ShowObjectRexxCode strClass
Case "Perl"
ShowPerlCode strClass
Case "PowerShell"
ShowPowerShellCode strClass
Case "Python"
ShowPythonCode strClass
Case "Ruby"
ShowRubyCode strClass
Case "VBDotNET"
ShowVBDotNETCode strClass
Case "VBScript"
ShowVBScriptCode strClass
End Select
' Change mouse pointer back to default
Document.Body.Style.Cursor = "default"
Code.title = "After pressing the 'Run WMI Code' button, the generated (VBScript) code will be executed, and the result will be shown here"
End Sub
Sub ShowBatchCode( myClass )
strCode = "@ECHO OFF" _
& vbCrLf _
& ":: WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& ":: This batch file was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& ":: http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "IF ""%~1""=="""" (" _
& vbCrLf _
& vbTab & "SET Node=%ComputerName%" _
& vbCrLf _
& ") ELSE (" _
& vbCrLf _
& vbTab & "SET Node=%~1" _
& vbCrLf _
& ")" _
& vbCrLf & vbCrLf _
& "WMIC.EXE /Node:""%Node%"" /Output:STDOUT Path " & myClass & " Get /Format:LIST" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowCSharpCode( myClass )
Const wbemCIMTypeSint16 = 2 'Signed 16-bit integer
Const wbemCIMTypeSint32 = 3 'Signed 32-bit integer
Const wbemCIMTypeReal32 = 4 '32-bit real number
Const wbemCIMTypeReal64 = 5 '64-bit real number
Const wbemCIMTypeString = 8 'String
Const wbemCIMTypeBoolean = 11 'Boolean value
Const wbemCIMTypeObject = 13 'CIM object
Const wbemCIMTypeSint8 = 16 'Signed 8-bit integer
Const wbemCIMTypeUint8 = 17 'Unsigned 8-bit integer
Const wbemCIMTypeUint16 = 18 'Unsigned 16-bit integer
Const wbemCIMTypeUint32 = 19 'Unsigned 32-bit integer
Const wbemCIMTypeSint64 = 20 'Signed 64-bit integer
Const wbemCIMTypeUint64 = 21 'Unsigned 64-bit integer
Const wbemCIMTypeDatetime = 101 'Date/time value
Const wbemCIMTypeReference = 102 'Reference to a CIM object
Const wbemCIMTypeChar16 = 103 '16-bit character
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "// WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "// This C# code was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "// http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "using System;" _
& vbCrLf _
& "using System.Management;" _
& vbCrLf _
& "using System.Linq;" _
& vbCrLf & vbCrLf _
& "namespace " & myClass & "_Query" _
& vbCrLf _
& "{" _
& vbCrLf _
& vbTab & "public class WMIQuery" _
& vbCrLf _
& vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & "public static void Main()" _
& vbCrLf _
& vbTab & vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & vbTab & "try" _
& vbCrLf _
& vbTab & vbTab & vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "ManagementObjectSearcher searcher = new ManagementObjectSearcher(""root\\CIMV2"", ""SELECT * FROM " & myClass & """);" _
& vbCrLf & vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "foreach (ManagementObject queryObj in searcher.Get())" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "{" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & vbTab & vbTab & vbTab & vbTab
If objProperty.IsArray = True Then
intCIMType = objProperty.CIMType
strCIMType = "string"
If intCIMType < 8 Then strCIMType = "UInt16"
If intCIMType > 15 And intCIMType < 100 Then strCIMType = "UInt16"
strCode = strCode & "if (queryObj[""" & objProperty.Name & """] == null)" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(""" & CreateLine( objProperty.Name ) & " {0}"", queryObj[""" & objProperty.Name & """]);" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "}" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "else" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & strCIMType & "[] arrProperty = (" & strCIMType & "[])(queryObj[""" & objProperty.Name & """]);" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.Write(""" & CreateLine( objProperty.Name ) & " "");" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(string.Join("";"", arrProperty.Select(cap => cap.ToString()).ToArray()));" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "}" _
& vbCrLf
Else
strCode = strCode & "Console.WriteLine(""" & CreateLine( objProperty.Name ) & " {0}"", queryObj[""" & objProperty.Name & """]);" & vbCrLf
End If
Next
strCode = strCode & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.WriteLine();" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "}" _
& vbCrLf _
& vbTab & vbTab & vbTab & "}" _
& vbCrLf _
& vbTab & vbTab & vbTab & "catch (ManagementException e)" _
& vbCrLf _
& vbTab & vbTab & vbTab & "{" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.OpenStandardError();" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(""An error occurred while querying WMI: "" + e.Message);" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.OpenStandardOutput();" _
& vbCrLf _
& vbTab & vbTab & vbTab & "}" _
& vbCrLf _
& vbTab & vbTab & "}" _
& vbCrLf _
& vbTab & "}" _
& vbCrLf _
& "}" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowJScriptCode( myClass )
' IsArray and Join() functionality "borrowed" from Scriptomatic 2.0
' http://www.microsoft.com/downloads/details.aspx?FamilyID=09dfc342-648b-4119-b7eb-783b0f7d1178&DisplayLang=en
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "// WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "// This JScript code was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "// http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "var wbemFlagReturnImmediately = 0x10;" _
& vbCrLf _
& "var wbemFlagForwardOnly = 0x20;" _
& vbCrLf & vbCrLf _
& "objArgs = WScript.Arguments;" _
& vbCrLf _
& "if ( objArgs.length == 1 ) {" _
& vbCrLf _
& " var strComputer = objArgs[0]" _
& vbCrLf _
& "} else {" _
& vbCrLf _
& " var strComputer = "".""" _
& vbCrLf _
& "}" _
& vbCrLf & vbCrLf _
& "var objWMIService = GetObject( ""winmgmts://"" + strComputer + ""/root/CIMV2"" );" _
& vbCrLf _
& "var colItems = objWMIService.ExecQuery( ""SELECT * FROM " & myClass & """, ""WQL"", wbemFlagReturnImmediately | wbemFlagForwardOnly );" _
& vbCrLf & vbCrLf _
& "var enumItems = new Enumerator( colItems );" _
& vbCrLf _
& "for ( ; !enumItems.atEnd(); enumItems.moveNext( ) ) {" _
& vbCrLf _
& " var objItem = enumItems.item( );" _
& vbCrLf & vbCrLf
For Each objProperty In objClass.Properties_
If objProperty.IsArray = True Then
strCode = strCode & vbTab & "try { WScript.Echo( """ & CreateLine( objProperty.Name ) & " "" + ( objItem." & objProperty.Name & ".toArray( ) ).join( "","" ) ); }" _
& vbCrLf _
& vbTab & "catch( e ) { WScript.Echo( """ & CreateLine( objProperty.Name ) & " null"" ); }" _
& vbCrLf
Else
strCode = strCode & vbTab & "WScript.Echo( """ & CreateLine( objProperty.Name ) & " "" + objItem." & objProperty.Name & " );" _
& vbCrLf
End If
Next
strCode = strCode _
& vbTab & "WScript.Echo( """" );" _
& vbCrLf & "}" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowKiXtartCode( myClass )
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "; WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "; This KiXtart script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "; http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "Break On" _
& vbCrLf & vbCrLf _
& "If $computer = """"" _
& vbCrLf _
& vbTab & "$arrKixVer = Split( @Kix, ""."" )" _
& vbCrLf _
& vbTab & "$KiXVer = 100 * $arrKixVer[ 0 ] + $arrKixVer[ 1 ]" _
& vbCrLf _
& vbTab & "$computer = "".""" _
& vbCrLf _
& vbTab & "If $KixVer > 451" _
& vbCrLf _
& vbTab & vbTab & "$arrGetCommandLine = GetCommandLine( 1 )" _
& vbCrLf _
& vbTab & vbTab & "$LastArg = $arrGetCommandLine[ UBound( $arrGetCommandLine ) ]" _
& vbCrLf _
& vbTab & vbTab & "If $LastArg <> ""@ScriptDir\@ScriptName""" _
& vbCrLf _
& vbTab & vbTab & vbTab & "$computer = $LastArg" _
& vbCrLf _
& vbTab & vbTab & "EndIf" _
& vbCrLf _
& vbTab & "EndIf" _
& vbCrLf _
& "EndIf" _
& vbCrLf & vbCrLf _
& "$objWMIService = GetObject( ""winmgmts://"" + $computer + ""/root/CIMV2"" )" _
& vbCrLf _
& "$colItems = $objWMIService.ExecQuery( ""SELECT * FROM " & myClass & """, ""WQL"", 48 )" _
& vbCrLf & vbCrLf _
& "For Each $objItem In $colItems" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "? """ & CreateLine( objProperty.Name ) & " "" + "
If objProperty.IsArray = True Then strCode = strCode & "Join( "
strCode = strCode & "$objItem." & objProperty.Name
If objProperty.IsArray = True Then strCode = strCode & ", "","" )"
strCode = strCode & vbCrLf
Next
strCode = strCode _
& vbTab & "?" _
& vbCrLf _
& "Next" _
& vbCrLf & vbCrLf _
& "Quit" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowObjectRexxCode( myClass )
' Based on the Rexx script samples found at the Script Repository:
' http://www.microsoft.com/technet/scriptcenter/scripts/rexx/default.mspx?mfr=true
' Tested with Open Object Rexx: http://www.oorexx.org/
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "/*" _
& vbCrLf _
& "WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "This Open Object Rexx script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf _
& "*/" _
& vbCrLf & vbCrLf _
& "Parse Upper Arg strComputer ." _
& vbCrLf _
& "If strComputer = """" Then strComputer = "".""" _
& vbCrLf & vbCrLf _
& "objWMIService = .OLEObject~GetObject( ""winmgmts://""||strComputer||""/root/CIMV2"" )" _
& vbCrLf & vbCrLf _
& "Do objItem Over objWMIService~ExecQuery( ""Select * from " & myClass & """ )" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "Say """ & CreateLine( objProperty.Name ) & " ""||"
If objProperty.IsArray = True Then strCode = strCode & "Translate( "
strCode = strCode & "objItem~" & objProperty.Name
If objProperty.IsArray = True Then strCode = strCode & ", "","", ""0D0A""x )"
strCode = strCode & vbCrLf
Next
strCode = strCode _
& vbTab & "Say" _
& vbCrLf _
& "End" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowPerlCode( myClass )
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "#! perl" _
& vbCrLf & vbCrLf _
& "# WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "# This Perl script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "# http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "use Win32::OLE( 'in' );" _
& vbCrLf & vbCrLf _
& "use constant wbemFlagReturnImmediately => 0x10;" _
& vbCrLf _
& "use constant wbemFlagForwardOnly => 0x20;" _
& vbCrLf & vbCrLf _
& "if ( $ARGV[0] ) {" _
& vbCrLf _
& vbTab & "$computer = $ARGV[0];" _
& vbCrLf _
& "} else {" _
& vbCrLf _
& vbTab & "$computer = ""."";" _
& vbCrLf _
& "}" _
& vbCrLf & vbCrLf _
& "my $objWMIService = Win32::OLE->GetObject( ""winmgmts://$computer/root/CIMV2"" ) or die ""WMI connection failed.\n"";" _
& vbCrLf _
& "my $colItems = $objWMIService->ExecQuery( ""SELECT * FROM " & myClass & """, ""WQL"", wbemFlagReturnImmediately | wbemFlagForwardOnly );" _
& vbCrLf & vbCrLf _
& "foreach my $objItem ( in $colItems ) {" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "print """ & CreateLine( objProperty.Name ) & " "" . "
If objProperty.IsArray = True Then strCode = strCode & "join( "","", ( in "
strCode = strCode & "$objItem->{ " & objProperty.Name & " }"
If objProperty.IsArray = True Then strCode = strCode & " ) )"
strCode = strCode & " . ""\n"";" & vbCrLf
Next
strCode = strCode _
& vbTab & "print ""\n"";" _
& vbCrLf _
& "}" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowPowerShellCode( myClass )
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "# WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "# This PowerShell script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "# http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "param( [string]$strComputer = ""."" )" _
& vbCrLf & vbCrLf _
& "$colItems = get-wmiobject -class """ & myClass & """ -namespace ""root\CIMV2"" -computername $strComputer" _
& vbCrLf & vbCrLf _
& "foreach ($objItem in $colItems) {" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "write-host """ & CreateLine( objProperty.Name ) & """ $objItem." & objProperty.Name & vbCrLf
Next
strCode = strCode _
& vbTab & "write-host" _
& vbCrLf _
& "}" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowPythonCode( myClass )
' Python code based on Scriptomatic 2.0 generated code
' http://www.microsoft.com/technet/scriptcenter/tools/scripto2.mspx
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "#! python" _
& vbCrLf & vbCrLf _
& "# WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "# This Python script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "# http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "import win32com.client" _
& vbCrLf & vbCrLf _
& "strComputer = "".""" _
& vbCrLf & vbCrLf _
& "objWMIService = win32com.client.Dispatch( ""WbemScripting.SWbemLocator"" )" _
& vbCrLf _
& "objSWbemServices = objWMIService.ConnectServer( strComputer, ""root/cimv2"" )" _
& vbCrLf _
& "colItems = objSWbemServices.ExecQuery( ""SELECT * FROM " & myClass & """ )" _
& vbCrLf & vbCrLf _
& "for objItem in colItems:" _
& vbCrLf
For Each objProperty In objClass.Properties_
If objProperty.IsArray = True Then
strCode = strCode & vbTab & "strList = "" """ _
& vbCrLf _
& vbTab & "try:" _
& vbCrLf _
& vbTab & vbTab & "for objElem in objItem." & objProperty.Name & " :" _
& vbCrLf _
& vbTab & vbTab & vbTab & "strList = strList + `objElem` + "",""" _
& vbCrLf _
& vbTab & "except:" _
& vbCrLf _
& vbTab & vbTab & "strList = strList + 'null'" _
& vbCrLf _
& vbTab & "print """ & CreateLine( objProperty.Name ) & """ + strList" _
& vbCrLf
Else
strCode = strCode _
& vbTab & "if objItem." & objProperty.Name & " != None:" _
& vbCrLf _
& vbTab & vbTab & "print """ & CreateLine( objProperty.Name ) & " "" + `objItem." & objProperty.Name & "`" _
& vbCrLf
End If
Next
Code.Value = strCode
ButtonState False
End Sub
Sub ShowRubyCode( myClass )
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "# WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "# This Ruby script was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "# http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "require 'win32ole'" _
& vbCrLf & vbCrLf _
& "objWMIService = WIN32OLE.connect( ""winmgmts://."" )" _
& vbCrLf _
& "colItems = objWMIService.ExecQuery( ""SELECT * FROM " & myClass & """ )" _
& vbCrLf & vbCrLf _
& "for objItem in colItems do" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "puts """ & CreateLine( objProperty.Name ) & " #{objItem." & objProperty.Name & "}""" & vbCrLf
Next
strCode = strCode _
& vbTab & "puts" _
& vbCrLf _
& "end" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowVBDotNETCode( myClass )
Const wbemCIMTypeSint16 = 2 'Signed 16-bit integer
Const wbemCIMTypeSint32 = 3 'Signed 32-bit integer
Const wbemCIMTypeReal32 = 4 '32-bit real number
Const wbemCIMTypeReal64 = 5 '64-bit real number
Const wbemCIMTypeString = 8 'String
Const wbemCIMTypeBoolean = 11 'Boolean value
Const wbemCIMTypeObject = 13 'CIM object
Const wbemCIMTypeSint8 = 16 'Signed 8-bit integer
Const wbemCIMTypeUint8 = 17 'Unsigned 8-bit integer
Const wbemCIMTypeUint16 = 18 'Unsigned 16-bit integer
Const wbemCIMTypeUint32 = 19 'Unsigned 32-bit integer
Const wbemCIMTypeSint64 = 20 'Signed 64-bit integer
Const wbemCIMTypeUint64 = 21 'Unsigned 64-bit integer
Const wbemCIMTypeDatetime = 101 'Date/time value
Const wbemCIMTypeReference = 102 'Reference to a CIM object
Const wbemCIMTypeChar16 = 103 '16-bit character
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "' WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "' This VB .NET code was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "' http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "Imports System" _
& vbCrLf _
& "Imports System.Management" _
& vbCrLf & vbCrLf _
& "Namespace WMIGen___" & myClass _
& vbCrLf _
& vbTab & "Public Class WMIGenQuery" _
& vbCrLf _
& vbTab & vbTab & "Public Overloads Shared Function Main() As Integer" _
& vbCrLf _
& vbTab & vbTab & vbTab & "Try" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Dim searcher As New ManagementObjectSearcher(""root\CIMV2"", ""SELECT * FROM " & myClass & """)" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Dim arrPropertyInt() As UInt16" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Dim arrPropertyStr() As String" _
& vbCrLf & vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "For Each queryObj As ManagementObject In searcher.Get()" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & vbTab & vbTab & vbTab & vbTab
If objProperty.IsArray = True Then
intCIMType = objProperty.CIMType
strCIMType = "String"
strArrayPr = "arrPropertyStr"
If intCIMType < 8 Then strCIMType = "UInt16"
If intCIMType > 15 And intCIMType < 100 Then strCIMType = "UInt16"
If strCIMType = "UInt16" Then strArrayPr = "arrPropertyInt"
strCode = strCode _
& "If queryObj(""" & objProperty.Name & """) Is Nothing Then" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(""" & CreateLine( objProperty.Name ) & " {0}"", queryObj(""" & objProperty.Name & """))" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "Else" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & strArrayPr & " = queryObj(""" & objProperty.Name & """)" _
& vbCrLf
If strCIMType = "UInt16" Then
strCode = strCode _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "ReDim arrPropertyStr(UBound(arrPropertyInt))" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "For i = 0 To UBound(arrPropertyInt)" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "arrPropertyStr(i) = CStr(arrPropertyInt(i))" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Next" _
& vbCrLf
End If
strCode = strCode _
& vbTab & vbTab & vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(""" & CreateLine( objProperty.Name ) & " {0}"", Join(arrPropertyStr, "";""))" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & vbTab & "End If" _
& vbCrLf
Else
strCode = strCode & "Console.WriteLine(""" & CreateLine( objProperty.Name ) & " {0}"", queryObj(""" & objProperty.Name & """))" & vbCrLf
End If
Next
strCode = strCode _
& vbTab & vbTab & vbTab & vbTab & "Next" _
& vbCrLf _
& vbTab & vbTab & vbTab & "Catch err As ManagementException" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.OpenStandardError()" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.WriteLine(""An error occurred while querying WMI: "" & err.Message)" _
& vbCrLf _
& vbTab & vbTab & vbTab & vbTab & "Console.OpenStandardOutput()" _
& vbCrLf _
& vbTab & vbTab & vbTab & "End Try" _
& vbCrLf _
& vbTab & vbTab & "End Function" _
& vbCrLf _
& vbTab & "End Class" _
& vbCrLf _
& "End Namespace" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Sub ShowVBScriptCode( myClass )
' IsArray an Join() functionality "borrowed" from Scriptomatic 2.0
' http://www.microsoft.com/downloads/details.aspx?FamilyID=09dfc342-648b-4119-b7eb-783b0f7d1178&DisplayLang=en
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}root/cimv2" )
Set objClass = objWMIService.Get( myClass )
strCode = "' WMI query to list all properties and values of the " & myClass & " class" _
& vbCrLf _
& "' This VBScript code was generated using the WMI Code Generator, Version " & WMIGen.Version _
& vbCrLf _
& "' http://www.robvanderwoude.com/wmigen.php" _
& vbCrLf & vbCrLf _
& "On Error Resume Next" _
& vbCrLf & vbCrLf _
& "Const wbemFlagReturnImmediately = &h10" _
& vbCrLf _
& "Const wbemFlagForwardOnly = &h20" _
& vbCrLf & vbCrLf _
& "If WScript.Arguments.UnNamed.Count = 1 Then" _
& vbCrLf _
& vbTab & "strComputer = WScript.Arguments.UnNamed(1)" _
& vbCrLf _
& "Else" _
& vbCrLf _
& vbTab & "strComputer = "".""" _
& vbCrLf _
& "End If" _
& vbCrLf & vbCrLf _
& "Set objWMIService = GetObject( ""winmgmts://"" & strComputer & ""/root/CIMV2"" )" _
& vbCrLf _
& "Set colInstances = objWMIService.ExecQuery( ""SELECT * FROM " & myClass & """, ""WQL"", wbemFlagReturnImmediately + wbemFlagForwardOnly )" _
& vbCrLf & vbCrLf _
& "For Each objInstance In colInstances" _
& vbCrLf
For Each objProperty In objClass.Properties_
strCode = strCode & vbTab & "WScript.Echo """ & CreateLine( objProperty.Name ) & " "" & "
If objProperty.IsArray = True Then strCode = strCode & "Join( "
strCode = strCode & "objInstance." & objProperty.Name
If objProperty.IsArray = True Then strCode = strCode & ", "","" )"
strCode = strCode & vbCrLf
Next
strCode = strCode _
& vbTab & "WScript.Echo" _
& vbCrLf _
& "Next" _
& vbCrLf
Code.Value = strCode
ButtonState False
End Sub
Function TextFromHTML( URL )
' Basic routine borrowed from http://dev.remotenetworktechnology.com/wsh/rubegoldberg.htm
' Improved wait-until-ready routine for HTAs by McKirahan on
' http://support.microsoft.com/newsgroups/default.aspx?dg=microsoft.public.scripting.scriptlets&tid=be461ec2-b444-440c-8155-ad0e8e839ca6&lang=en&cr=US&sloc=en-us&p=1
Set objIE = CreateObject( "InternetExplorer.Application" )
objIE.Navigate URL
While objIE.Busy
Wend
TextFromHTML = objIE.Document.Body.InnerText
objIE.Quit
End Function
Sub Window_Onload
AppVersion.InnerHTML = WMIGen.Version
document.title = "WMI Code generator " & WMIGen.Version
ButtonState True
If InStr( UCase( WMIGen.CommandLine ), "/NOPERF" ) Then blnShowPerfClasses = False
If InStr( UCase( WMIGen.CommandLine ), "/WIN32" ) Then blnShowAllClasses = False
FillClassDropDown
CheckWindowSize( )
CheckUpdate( )
CreateIEHelp( )
objIEHelp.Visible = 0
End Sub
Sub Window_Onunload
On Error Resume Next
objIEHelp.Quit
Set objIEHelp = Nothing
On Error Goto 0
End Sub
</script>
<body style="font:12 pt arial; color:white; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#000000', EndColorStr='#FFFFFF')" onresize="CheckWindowSize()">
<div align="Center">
<span id="Update"> </span>
<table border="0" cellspacing="10">
<tr align="Center">
<th colspan="2" title="Select a WMI class from this drop-down list, then select a scripting language and press the 'Generate Code' button to show the code for the selected WMI query and the selected scripting language in the lower text area" align="Left">Select a WMI Class:</th>
</tr>
<tr align="Center">
<td colspan="2" title="Select a WMI class from this drop-down list, then select a scripting language and press the 'Generate Code' button to show the code for the selected WMI query and the selected scripting language in the lower text area"><select onchange="HandleClassChange" name="WMIClasses" size="6" style="width: 100%"></select></th>
</tr>
<tr align="Center">
<th title="This list shows the available properties for the selected WMI class" align="Left">Properties:</th>
<th title="This list shows the available methods for the selected WMI class" align="Left">Methods:</th>
</tr>
<tr align="Center">
<td style="width: 50%"><select id="Properties" title="This list shows the available properties for the selected WMI class" size="6" style="width: 100%"></select></td>
<td style="width: 50%"><select id="Methods" title="This list shows the available methods for the selected WMI class" size="6" style="width: 100%"></select></td>
</tr>
<tr align="Center">
<th id="CodeLabel" title="After pressing the 'Generate Code' button, the generated code to display the available properties and their values for the selected WMI class will be shown here" align="Left">Code:</th>
<th align="Right"><input id="GetHelpButton" onclick="GetHelp" type="submit" value="Help" class="Button" title="Press this button to search and open the relevant MSDN page for the selected class, method and/or property"></th>
</tr>
<tr align="Center">
<td colspan="2"><textarea id="Code" rows="20" cols="70" readonly></textarea></td>
</tr>
<tr align="Left">
<th colspan="2" title="Select a scripting language from this drop-down list and press the 'Generate Code' button to show the code for the selected WMI query and scripting language in the text area above" align="Left">Select a scripting language:
<select name="CodeLanguage" id="CodeLanguage" onchange="HandleLanguageChange()" style="text-align: left; margin-left: 0">
<option value="Batch">Batch</option>
<option value="CSharp">C#</option>
<option value="JScript">JScript</option>
<option value="KiXtart">KiXtart</option>
<option value="ObjectRexx">ObjectRexx</option>
<option value="Perl">Perl</option>
<option value="PowerShell">PowerShell</option>
<option value="Python">Python</option>
<option value="Ruby">Ruby</option>
<option value="VBDotNET">VB .NET</option>
<option value="VBScript">VBScript</option>
</select></th>
</tr>
<tr align="Center">
<td colspan="2">
<input id="GenerateCodeButton" onclick="ShowCode" type="submit" value="Generate Code" class="Button" title="Press this button to generate the code that will display the properties and their values for the selected WMI class, in the selected script language">
<input id="RunCodeButton" onclick="RunCode" type="submit" value="Run WMI Code" class="Button" title="Press this button to run the generated (VBSCript) code">
<input id="ClearCodeButton" onclick="ClearCode" type="submit" value="Clear" class="Button" title="Press this button to erase the generated code">
<input id="CopyCodeButton" onclick="CopyCode" type="submit" value="Copy to Clipboard" class="Button" title="Press this button to copy the generated code to the clipboard"></td>
</tr>
</table>
<p><span style="font-size: 12pt">WMI Code Generator, Version <span id="AppVersion">0.00</span></span><br>
© 2006 - 2010, Rob van der Woude<br>
<a href="http://www.robvanderwoude.com/">http://www.robvanderwoude.com</a></p>
<p>Based on the Microsoft TechNet ScriptCenter article
<a href="http://www.microsoft.com/technet/scriptcenter/resources/guiguy/default.mspx">Scripting Eye for the GUI Guy</a>.<br>
Created with the help of WBEMTEST, the Scripting Guys'
<a href="http://www.microsoft.com/technet/scriptcenter/tools/scripto2.mspx">Scriptomatic</a> and
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=231D8143-F21B-4707-B583-AE7B9152E6D9&displaylang=en">HTA Helpomatic</a>
tools, and Adersoft's <a href="http://www.htaedit.com/">HTAEdit</a>.<br>
Help search function based on
<a href="http://www.google.com/">Google Search</a> and completed with help from
<a href="http://www.seroundtable.com/archives/015944.html">Search Engine Roundtable</a>.</p>
</div>
</body>
</html>
Como obtener el código con el Generador de Códigos de WMI
Para obtener el código del Generador, para crear tu propia aplicación, sigue los siguientes pasos:
1- Inicia la aplicación y espera a que termine de cargar.
2- En el menú de la ventana superior selecciona una clase de WMI, por ejemplo una perteneciente a Win32.
3- En el cuadro inferior selecciona una propiedad de las disponibles.
4- Selecciona el formato del código de los disponibles. El predeterminado es batch, pero se puede escoger entre C+, JScript, VBScript, Perl y otros.
5- Presiona el botón "Generate Code".
En la siguiente imagen se puede ver cómo obtener el código, para crear un archivo batch que muestra toda la información que proporciona WMI sobre el disco duro de la computadora (Win32_LogicalDisk).2- En el menú de la ventana superior selecciona una clase de WMI, por ejemplo una perteneciente a Win32.
3- En el cuadro inferior selecciona una propiedad de las disponibles.
4- Selecciona el formato del código de los disponibles. El predeterminado es batch, pero se puede escoger entre C+, JScript, VBScript, Perl y otros.
5- Presiona el botón "Generate Code".

Archivos batch de ejemplo
Crea un archivo batch de prueba usando el siguiente código, que muestra la información en la ventana del Símbolo del sistema.@ECHO OFF
WMIC.EXE /Node:"%Node%" /Output:STDOUT Path Win32_LogicalDisk Get /Format:LIST
pause
Crea un archivo batch de prueba usando el siguiente código, que escribe la información anterior en un archivo de texto en el escritorio.
@ECHO OFF
WMIC.EXE /Node:"%Node%" /Output:%userprofile%\Desktop\lista.txt Path Win32_LogicalDisk Get /Format:LIST
PAUSE
Más información
✓ Como usar los comandos de la consola de WMIC en Windows✓ Páginas y aplicaciones HTA, uso y funciones prácticas
✓ Como crear una página o aplicación HTA
✓ Aplicaciones HTA para obtener información y diagnosticar redes
✓ Aplicación HTA para validar archivos XML offline
Comparte
Facebook
Twitter