clivebuckwheat Posted June 4, 2010 Share Posted June 4, 2010 (edited) Hi I found the following script online to determine what type of hardware I have. I would like help from someone if possible. What I would like to have happen is if it's a laptop kick of an installation from an msi from within the unattend.xml from within the first login commands section.can some take a look at the script and tell me the what I have to add to make this happen.Option ExplicitDim strComputer, strChassisDim objWMIService, objChassis, colChassis, objItemstrComputer = "."Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2")Set colChassis = objWMIService.ExecQuery _("Select * from Win32_SystemEnclosure",,16)For Each objChassis in colChassis For Each objItem in objChassis.ChassisTypes Select Case objItem Case 1 strChassis = "Maybe Virtual Machine" Case 2 strChassis = "??" Case 3 strChassis = "Desktop" Case 4 strChassis = "Thin Desktop" Case 5 strChassis = "Pizza Box" Case 6 strChassis = "Mini Tower" Case 7 strChassis = "Full Tower" Case 8 strChassis = "Portable" Case 9 strChassis = "Laptop" Case 10 strChassis = "Notebook" Case 11 strChassis = "Hand Held" Case 12 strChassis = "Docking Station" Case 13 strChassis = "All in One" Case 14 strChassis = "Sub Notebook" Case 15 strChassis = "Space-Saving" Case 16 strChassis = "Lunch Box" Case 17 strChassis = "Main System Chassis" Case 18 strChassis = "Lunch Box" Case 19 strChassis = "SubChassis" Case 20 strChassis = "Bus Expansion Chassis" Case 21 strChassis = "Peripheral Chassis" Case 22 strChassis = "Storage Chassis" Case 23 strChassis = "Rack Mount Unit" Case 24 strChassis = "Sealed-Case PC" End Select NextNextWScript.Echo "Computer chassis type: " & strChassis'WScript.Echo strComputer & "'s chassis type: " & strChassisWScript.Quit' End of WMI VBScript - Chassis typeEDIT: This is in reference to this thread: Edited June 4, 2010 by Tripredacus added reference link Link to comment Share on other sites More sharing options...
cluberti Posted June 4, 2010 Share Posted June 4, 2010 Have the unattend execute your script, and have the script do something like this:Option ExplicitDim strComputer, strChassisDim objWMIService, objChassis, objItem, objShellAppDim execOutput, isRunning, colChassisRunMeWithCscript()WScript.StdOut.Write vbCrLf & "Started at: " & NowstrComputer = "."Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")Set colChassis = objWMIService.ExecQuery( _ "SELECT * FROM Win32_SystemEnclosure",,48) For Each objChassis in colChassis strChassis = Join(objChassis.ChassisTypes, ",") If strChassis = 9 Then Set objShellApp = CreateObject("WScript.Shell") Set isRunning = objShellApp.Exec("msiexec /i <drive:\path\to\file>.msi") Do While isRunning.Status = 0 WScript.Sleep 100 execOutput = isRunning.StdOut.ReadAll Loop Set isRunning = Nothing Else '// It's a UFPO - Unknown Floating Point Operator!!! ALIENS!!! End IfNextWScript.StdOut.Write vbCrLf & "strChassis: " & strChassisWScript.StdOut.Write vbCrLf & "Finished at: " & NowSub RunMeWithCScript() Dim ScriptEngine, engineFolder, Args, arg, scriptName, argString, scriptCommand ScriptEngine = UCase(Mid(WScript.FullName, InstrRev(WScript.FullName, "\") + 1)) engineFolder = Left(WScript.FullName, InstrRev(WScript.FullName, "\")) argString = "" 'WScript.Echo ScriptEngine If ScriptEngine = "WSCRIPT.EXE" Then Dim Shell Set Shell = CreateObject("WScript.Shell") Set Args = WScript.Arguments For Each arg in Args 'loop though argument array as a collection to rebuild argument string If InStr(arg, " ") > 0 Then arg = """" & arg & """" 'If the argument contains a space wrap it in double quotes argString = argString & " " & Arg Next 'Create a persistent command prompt for the cscript output window and call the script with its original arguments scriptCommand = "cmd.exe /k " & engineFolder & "cscript.exe """ & WScript.ScriptFullName & """" & argString Shell.Run scriptCommand, , False WScript.Quit Else Exit Sub 'Already Running with Cscript Exit this Subroutine End IfEnd Sub Link to comment Share on other sites More sharing options...
arwidmark Posted June 4, 2010 Share Posted June 4, 2010 Here is the snippet from MDT 2010 that does that...' Get the SMBIOS asset tag from the Win32_SystemEnclosure classSet objResults = objWMI.InstancesOf("Win32_SystemEnclosure")bIsLaptop = falsebIsDesktop = falsebIsServer = falseFor each objInstance in objResults If objInstance.ChassisTypes(0) = 12 or objInstance.ChassisTypes(0) = 21 then ' Ignore docking stations Else If not IsNull(objInstance.SMBIOSAssetTag) then sAssetTag = Trim(objInstance.SMBIOSAssetTag) End if Select Case objInstance.ChassisTypes(0) Case "8", "9", "10", "11", "12", "14", "18", "21" bIsLaptop = true Case "3", "4", "5", "6", "7", "15", "16" bIsDesktop = true Case "23" bIsServer = true Case Else ' Do nothing End Select End ifNext/ Johan Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now