26/11/2008

What is WQL and how to use it

The SCCM / MDT Task Sequence Editor lets you specify "conditions" under which particular Tasks can run.
One of the conditions that can be used is a WQL query.

This post explains what WQL is and how to use it.

What is WQL
WQL stands for "WMI Query language"
WQL is a subset of SQL and can be thought of as "SQL for WMI"

Why use it?
Having the ability to run a task based on a WQL query is incredibly powerfull.
This means you can cause something to happen (or not happen) based on the result of a WMI property.

e.g
You may want to run a driver package only on specific types of hardare
Whilst a common scenario, it's not "obvious" how to create and test a WQL query when starting from scratch.

Creating and testing with WQL
The Task sequence editor dosn't provide any help with constructing or testing a WQL query, so (to avoid pain and dissapintment!) it's best to TEST this using another tool before using a WQL query in a task sequence.

An easy way to do this is to use WBEMTest.exe

Using "Windows Management Instrumentation Tester" (WBEMTest) to validate a WQL query

  • run WBEMTest.exe
  • Select "Connect..."
  • Enter root\cimv2 (instead of root\default)
  • Select Connect

  • Select "Query..."

  • Start by entering a simple query
    e.g. SELECT * FROM Win32_Computersystem
  • Select "Apply" to run the query

  • You'll see a "Result" similar to the one below:

  • Double-click on the result to "drill-down" and have a look for some more "interesting" properties to query for!
  • Scroll-down within "Properties" and note the value for "Model"
    (in my example this is a "ProLiant ML110 G5")

  • You can use these details to construct a more useful WQL query.
  • Go back to the query screen (Close,Close then Query)
  • Enter a query using the new values:
    SELECT * FROM Win32_ComputerSystem WHERE Model = "your model"

  • In my case this returns "1 objects". This means it's a "success"
    (i.e. will be evaluated as "True" if used within a Task Sequence)

What happens if a query dosn't evalue to True

  • Below is the output when looking for something that won't result in a match

  • Basically it returns "0 objects"
    (i.e. will be evaluated as "False" if used in a Task Sequence")


What happens if an invalid query is specified

This is likely to be a common scenario when "getting the hang of it" / testing.

Other Queries to try

Show all local accounts

  • SELECT * FROM Win32_Account

This can be easily "refined" to look for a specific account

  • SELECT * FROM Win32_Account WHERE Name = "FredBloggs"

Useful References

MSDN : WQL (SQL for WMI)

No comments: