#189942 - 2008-09-30 05:39 PM
ScriptOMatic .Net v2.0
|
Arend_
MM club member
Registered: 2005-01-17
Posts: 1895
Loc: Hilversum, The Netherlands
|
This is version 2.0 of the ScriptOMatic. Only thing that has really changed is that now ALL class types are available. Well "All" means the ones available to you on your computer. For instance if you have installed SNMP WMI support then it won't show up in the list either. In version 1.0 there were only 3 versions available and Win32 was basically only a filter. This also results in shorter code.
Anyway without further ado:
Break On
$System = CreateObject("Kixforms.System")
If Not $System
$nul= MessageBox("KiXforms.Net Not Initiated. This Script Will Now Close.","Error",16)
Quit()
EndIf
$nul = $System.Application.EnableVisualStyles
$Form1 = $System.Form()
$Form1.Left = 0
$Form1.StartPosition = 0 ;FormStartPosition_Manual
$Form1.Size = $System.Size(604,588) ;(Width,Height)
$Form1.Text = "ScriptOMatic .Net v2.0"
$Form1.Top = 0
$Form1.TopMost = 0 ;False
$Button1 = $System.Button()
$Button1.Anchor = 9 ;Top,Right
$Button1.Left = 430
$Button1.Text = "Run"
$Button1.Top = 10
$Button1.Width = 40
$Button1.Click = "RunScript()"
$nul = $Form1.Controls.Add($Button1)
$Button2 = $System.Button()
$Button2.Anchor = 9 ;Top,Right
$Button2.Left = 470
$Button2.Text = "Save"
$Button2.Top = 10
$Button2.Width = 40
$Button2.Click = "SaveScript()"
$nul = $Form1.Controls.Add($Button2)
$Button3 = $System.Button()
$Button3.Anchor = 9 ;Top,Right
$Button3.Left = 510
$Button3.Text = "Open"
$Button3.Top = 10
$Button3.Width = 40
$Button3.Click = "OpenScript()"
$nul = $Form1.Controls.Add($Button3)
$Button4 = $System.Button()
$Button4.Anchor = 9 ;Top,Right
$Button4.Left = 550
$Button4.Text = "Quit"
$Button4.Top = 10
$Button4.Width = 40
$Button4.Click = "$$Form1.Hide"
$nul = $Form1.Controls.Add($Button4)
$TextBox1 = $System.TextBox()
$TextBox1.Anchor = 15 ;Top,Left,Bottom,Right
$TextBox1.BackColor = $System.Color.FromName("Control")
$TextBox1.Height = 330
$TextBox1.Left = 10
$TextBox1.MultiLine = -1 ;True
$TextBox1.ReadOnly = -1 ;True
$TextBox1.ScrollBars = 3 ;Both
$TextBox1.Text = ""
$TextBox1.Top = 82 ;70
$TextBox1.Width = 580
$TextBox1.Font = $System.Font("Courier New",8.25,0) ;Regular
$nul = $Form1.Controls.Add($TextBox1)
$TextBox2 = $System.TextBox()
$TextBox2.Anchor = 14 ;Left,Bottom,Right
$TextBox2.BackColor = $System.Color.FromName("Control")
$TextBox2.Height = 110
$TextBox2.Left = 10
$TextBox2.MultiLine = -1 ;True
$TextBox2.ReadOnly = -1 ;True
$TextBox2.ScrollBars = 2 ;Vertical
$TextBox2.Text = ""
$TextBox2.Top = 430
$TextBox2.Width = 580
$TextBox2.Font = $System.Font("Courier New",8.25,0) ;Regular
$nul = $Form1.Controls.Add($TextBox2)
$Label1 = $System.Label()
$Label1.Anchor = 14 ;Left,Bottom,Right
$Label1.BorderStyle = 0
$Label1.Height = 20
$Label1.Left = 10
$Label1.Text = "Methods:"
$Label1.Top = 415
$nul = $Form1.Controls.Add($Label1)
$GroupBox1 = $System.GroupBox()
$GroupBox1.Left = 10
$GroupBox1.Text = "Class Types"
$GroupBox1.Top = 32
$GroupBox1.Width = 210
$GroupBox1.Height = 45
$nul = $Form1.Controls.Add($GroupBox1)
$GroupBox2 = $System.GroupBox()
$GroupBox2.Anchor = 1 ;Top
$GroupBox2.Left = 225
$GroupBox2.Text = "Script Type"
$GroupBox2.Top = 32
$GroupBox2.Width = 110
$GroupBox2.Height = 45
$nul = $Form1.Controls.Add($GroupBox2)
$GroupBox3 = $System.GroupBox()
$GroupBox3.Anchor = 9 ;Top,Right
$GroupBox3.Left = 340
$GroupBox3.Text = "VBS Runtime"
$GroupBox3.Top = 32
$GroupBox3.Width = 112
$GroupBox3.Height = 45
$GroupBox3.Hide
$nul = $Form1.Controls.Add($GroupBox3)
$ComboBox1 = $System.ComboBox()
$ComboBox1.Anchor = 13 ;Left,Top,Right
$ComboBox1.IntegralHeight = 0
$ComboBox1.ItemHeight = 25
$ComboBox1.Left = 10
$ComboBox1.Text = "Select a Class"
$ComboBox1.Top = 10
$ComboBox1.Width = 410
$ComboBox1.Sorted = 1
$ComboBox1.SelectedIndexChanged = "$$=CheckType($$ComboBox2.Text)"
;$ComboBox1.Enabled = 0
$nul = $Form1.Controls.Add($ComboBox1)
$ComboBox2 = $System.ComboBox()
$ComboBox2.Anchor = 13 ;Left,Top,Right
$ComboBox2.IntegralHeight = 0
$ComboBox2.ItemHeight = 25
$ComboBox2.Left = 5
$ComboBox2.Text = "SELECT A CLASS TYPE HERE!"
$ComboBox2.Top = 15
$ComboBox2.Width = 200
$ComboBox2.Sorted = 1
$ComboBox2.SelectedIndexChanged = "$$=EnumClasses($$ComboBox2.Text)"
$nul = $GroupBox1.Controls.Add($ComboBox2)
$RadioButton5 = $System.RadioButton()
$RadioButton5.Appearance = 1 ;Button
$RadioButton5.Checked = -1 ;True
$RadioButton5.Left = 5
$RadioButton5.Text = "KIX"
$RadioButton5.TextAlign = 32 ;MiddleCenter
$RadioButton5.Top = 15
$RadioButton5.Width = 50
$RadioButton5.Click = "$$=CheckType($$ComboBox2.Text)"
$nul = $GroupBox2.Controls.Add($RadioButton5)
$RadioButton6 = $System.RadioButton()
$RadioButton6.Appearance = 1 ;Button
$RadioButton6.Left = 55
$RadioButton6.Text = "VBS"
$RadioButton6.TextAlign = 32 ;MiddleCenter
$RadioButton6.Top = 15
$RadioButton6.Width = 50
$RadioButton6.Click = "$$=CheckType($$ComboBox2.Text)"
$nul = $GroupBox2.Controls.Add($RadioButton6)
$RadioButton7 = $System.RadioButton()
$RadioButton7.Appearance = 1 ;Button
$RadioButton7.Checked = -1 ;True
$RadioButton7.Left = 5
$RadioButton7.Text = "CScript"
$RadioButton7.TextAlign = 32 ;MiddleCenter
$RadioButton7.Top = 15
$RadioButton7.Width = 50
$RadioButton7.Click = "$$=CheckType($$ComboBox2.Text)"
$nul = $GroupBox3.Controls.Add($RadioButton7)
$RadioButton8 = $System.RadioButton()
$RadioButton8.Appearance = 1 ;Button
$RadioButton8.Left = 55
$RadioButton8.Text = "WScript"
$RadioButton8.TextAlign = 32 ;MiddleCenter
$RadioButton8.Top = 15
$RadioButton8.Width = 52
$RadioButton8.Click = "$$=CheckType($$ComboBox2.Text)"
$nul = $GroupBox3.Controls.Add($RadioButton8)
$OpenFileDialog1 = $System.OpenFileDialog()
$OpenFileDialog1.InitialDirectory = "@SCRIPTDIR"
$OpenFileDialog1.Filter = "KiX files (*.kix)|*.kix|VBS files (*.vbs)|*.vbs|All files (*.*)|*.*"
$OpenFileDialog1.FilterIndex = 1
$OpenFileDialog1.RestoreDirectory = 1 ;True
$SaveFileDialog1 = $System.SaveFileDialog()
$SaveFileDialog1.InitialDirectory = "@SCRIPTDIR"
$SaveFileDialog1.Filter = "KiX files (*.kix)|*.kix|VBS files (*.vbs)|*.vbs|All files (*.*)|*.*"
$SaveFileDialog1.FilterIndex = 1
$SaveFileDialog1.RestoreDirectory = 1 ;True
$Form2 = $System.Form()
$Form2.Text = "Loading Classes..."
$Form2.ControlBox = 0 ;False
$Form2.StartPosition = 1 ;FormStartPosition_CenterScreen
$Form2.Size = $System.Size(250,60) ;(Width,Height)
$PBar = $System.ProgressBar()
$PBar.Width = 242
$PBar.Height = 25
$PBar.Style = "1"
$PBar.Center
$nul = $Form2.Controls.Add($PBar)
$=EnumNameSpaces("root")
$Form1.Center
$Form1.Show ;Displays the Form
While $Form1.Visible
$Nul = Execute($Form1.DoEvents())
Loop
Exit 0
Function CheckType($strRoot)
Select
Case $RadioButton5.Checked = -1
$GroupBox3.Hide
ListClassKIX($strRoot)
Case $RadioButton6.Checked = -1
$GroupBox3.Show
ListClassVBS($strRoot)
EndSelect
EndFunction
Function EnumNameSpaces($strNameSpace)
$ComboBox2.Enabled = 0
Dim $objWMIService, $colNameSpaces, $objNameSpace
$=$ComboBox2.Items.Add($strNameSpace)
$objWMIService = GetObject("winmgmts:\\.\"+$strNameSpace)
$colNameSpaces = $objWMIService.InstancesOf("__NAMESPACE")
For Each $objNameSpace In $colNameSpaces
EnumNameSpaces($strNameSpace+"\"+$objNameSpace.Name)
Next
$ComboBox2.Enabled = 1
EndFunction
Function EnumClasses($Root)
$Form2.Show
$PBar.Value = 0
$ComboBox1.Items.Clear
$ComboBox1.Enabled = 0
Dim $objWMIService, $objClass, $IsQ
$objWMIService = GetObject("winmgmts:\\.\"+$Root)
$PBar.Max = $objWMIService.SubclassesOf().Count
For Each $objClass in $objWMIService.SubclassesOf()
$PBar.Value = $PBar.Value + 1
$IsQ = 0
For Each $Qualifier in $objClass.Qualifiers_
If Instr($Qualifier.Name, "ASSOCIATION")
$IsQ = 1
Endif
Next
If $IsQ = 0
$=$ComboBox1.Items.Add($objClass.Path_.Class)
Endif
Next
$Form2.Hide
$ComboBox1.Enabled = 1
$objWMIService = ""
EndFunction
Function ListClassKiX($strRoot)
Dim $Class, $Script, $Script2, $objWMIService, $objClass, $objProperty, $objMethod
If $ComboBox1.Text <> "Begin by selecting a class"
$Class = $ComboBox1.Text
$TextBox1.Text = ""
$TextBox2.Text = ""
$objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\"+$strRoot)
$objClass = $objWMIService.Get($Class)
$Script = 'Break On' + @CRLF
$Script = $Script + '$$strComputer = "."' + @CRLF
$Script = $Script + '$$objWMIService = GetObject("winmgmts:\\" + $$strComputer + "\$strRoot")' + @CRLF
$Script = $Script + '$$colItems = $$objWMIService.ExecQuery("Select * from $Class",,48)' + @CRLF
$Script = $Script + 'For Each $$objItem in $$colItems' + @CRLF
For Each $objProperty in $objClass.properties_
$Prop = $objProperty.name
If $objProperty.IsArray
$Script = $Script + ' For Each $$Item in $objItem.' + $Prop + @CRLF
$Script = $Script + ' "*' + $Prop + ': " + $$Item ?' + @CRLF
$Script = $Script + ' Next' + @CRLF
Else
$Script = $Script + ' "' + $Prop + ': " + $$objItem.' + $Prop + ' ?' + @CRLF
Endif
Next
$Script = $Script + ' ?' + @CRLF + 'Next' + @CRLF
For Each $objMethod in $objClass.methods_
$Method = $objMethod.name
$Script2 = $Script2 + ' ' + $Method + ': $$objItem.' + $Method + @CRLF
Next
$script = $script + @CRLF + "? 'Press Any Key to Close the Window'" + @CRLF + "Get $"
$TextBox1.Text = $Script
$TextBox2.Text = $Script2
Else
$TextBox1.Text = ""
$TextBox2.Text = ""
Endif
$objWMIService = ""
EndFunction
Function ListClassVBS($strRoot)
Dim $Class, $Script, $Script2, $objWMIService, $objClass, $objProperty, $objMethod
If $ComboBox1.Text <> "Begin by selecting a class"
$Class = $ComboBox1.Text
$TextBox1.Text = ""
$TextBox2.Text = ""
$objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\"+$strRoot)
$objClass = $objWMIService.Get($Class)
$Script = 'On Error Resume Next' + @CRLF
$Script = $Script + 'strComputer = "."' + @CRLF
$Script = $Script + 'Set objWMIService = GetObject("winmgmts:\\" + strComputer + "\$strRoot")' + @CRLF
$Script = $Script + 'Set colItems = objWMIService.ExecQuery("Select * from $Class",,48)' + @CRLF
$Script = $Script + 'For Each objItem in colItems' + @CRLF
For Each $objProperty in $objClass.properties_
$Prop = $objProperty.name
If $objProperty.IsArray
$Script = $Script + ' For Each Item in objItem.' + $Prop + @CRLF
$Script = $Script + ' WScript.Echo "*' + $Prop + ': " & Item' + @CRLF
$Script = $Script + ' Next' + @CRLF
Else
$Script = $Script + ' WScript.Echo "' + $Prop + ': " & objItem.' + $Prop + @CRLF
Endif
Next
$Script = $Script + ' WScript.Echo' + @CRLF + 'Next' + @CRLF
If $RadioButton7.Checked = -1
$Script = $Script + @CRLF + 'WScript.Echo "Press Any Key to Close the Window"' + @CRLF + 'Wscript.StdIn.ReadLine'
EndIf
For Each $objMethod in $objClass.methods_
$Method = $objMethod.name
$Script2 = $Script2 + ' ' + $Method + ': objItem.' + $Method + @CRLF
Next
$TextBox1.Text = $Script
$TextBox2.Text = $Script2
Else
$TextBox1.Text = ""
$TextBox2.Text = ""
Endif
$objWMIService = ""
EndFunction
Function RunScript()
Dim $FSO, $strTmpName, $objScript, $objShell, $strComdLine, $nul
$FSO = CreateObject("Scripting.FileSystemObject")
$objShell = CreateObject("WScript.Shell")
If $RadioButton5.Checked = -1
$strTmpName = "temp_script.kix"
$objScript = $FSO.CreateTextFile($strTmpName)
$objScript.Write($TextBox1.Text)
$objScript.Close
If "@SCRIPTEXE"<>"wkix32.exe"
$strCmdLine = "kix32.exe"
Else
$strCmdLine = "wkix32.exe"
EndIf
If @SCRIPTDIR<>@CURDIR and Exist(@SCRIPTDIR + "\" + @SCRIPTEXE)
$strCmdLine = '"' + @SCRIPTDIR + $strCmdLine + '" "' + $strTmpName + '"'
Else
$strCmdLine = '"' + $strCmdLine + ' "' + $strTmpName + '"'
EndIf
$nul = $objShell.Run($strCmdLine)
Else
$strTmpName = "temp_script.vbs"
$objScript = $FSO.CreateTextFile($strTmpName)
$objScript.Write($TextBox1.Text)
$objScript.Close
If $RadioButton7.Checked = -1
$strCmdLine = "cscript.exe"
Else
$strCmdLine = "wscript.exe"
EndIf
If @SCRIPTDIR<>@CURDIR
$strCmdLine = '"' + @SCRIPTDIR + $strCmdLine + '" "' + $strTmpName + '"'
Else
$strCmdLine = '"' + $strCmdLine + ' "' + $strTmpName + '"'
EndIf
$nul = $objShell.Run($strCmdLine)
EndIf
EndFunction
Function SaveScript()
Dim $dlgSave, $FSO, $strTmpName, $objScript
$FSO = CreateObject("Scripting.FileSystemObject")
If $RadioButton5.Checked = -1
$strTmpName = "temp_script.kix"
$SaveFileDialog1.FilterIndex = 1
$SaveFileDialog1.FileName = $ComboBox1.Text
Else
$strTmpName = "temp_script.vbs"
$SaveFileDialog1.FilterIndex = 2
$SaveFileDialog1.FileName = $ComboBox1.Text
EndIf
$objScript = $FSO.CreateTextFile($strTmpName)
$objScript.Write($TextBox1.Text)
$objScript.Close
If $SaveFileDialog1.ShowDialog() = 1
$dlgSave = $SaveFileDialog1.FileName
EndIf
Copy $strTmpName $dlgSave
EndFunction
Function OpenScript()
Dim $dlgOpen, $FSO, $Script, $objFile
If $OpenFileDialog1.ShowDialog() = 1
$dlgOpen = $OpenFileDialog1.Filename
$FSO = CreateObject("Scripting.FileSystemObject")
$objFile = $FSO.OpenTextFile($dlgOpen)
$Script = $objFile.ReadAll()
$TextBox1.Text = $Script
$objFile.Close
$TextBox1.Show
EndIf
EndFunction
|
Top
|
|
|
|
#189951 - 2008-10-01 08:52 AM
Re: ScriptOMatic .Net v2.0
[Re: Lonkero]
|
Arend_
MM club member
Registered: 2005-01-17
Posts: 1895
Loc: Hilversum, The Netherlands
|
Lonk:
1. KixOMatic only does root\CIMV2, this one has ALL namespaces available. 2. KiXOMatic filters CIMV2 by only showing namespaces that begin with "Win32", this one doesn't. 3. KiXOMatic doesn't show Methods, only Properties, this one shows both.
And this one is written in KixForms .Net
|
Top
|
|
|
|
#192743 - 2009-03-09 11:26 AM
Re: ScriptOMatic .Net v2.0
[Re: Lonkero]
|
Arend_
MM club member
Registered: 2005-01-17
Posts: 1895
Loc: Hilversum, The Netherlands
|
a) Will look into it when I have time. b) Fix it by changing this line:
$TextBox1.ReadOnly = -1 ;True to
$TextBox1.ReadOnly = 0 ;False
|
Top
|
|
|
|
Moderator: Shawn, ShaneEP, Ruud van Velsen, Arend_, Jochen, Radimus, Glenn Barnas, Allen, Mart
|
0 registered
and 539 anonymous users online.
|
|
|