Making groups of logical disks – an example from simple to advanced
I have been seeing this question come up a lot lately – as customers try and create groups of their disks – in order to create overrides for “certain” disks. So – I am creating this post to give some real world examples.
Well – I will start this simply. Say we want to create a group of all logical disks, with the drive letters of C: and D:?
I would start with creating a new group – and adding the “Windows Server 2003 Logical Disk” class. Now – I could just use the parent class of “Logical Disk” instead of the OS specific class if I wanted. The only issue with that is that most monitors targeting a disk – are OS specific – and duplicated three times. So it is best to create specific groups for these – but totally not required.
Now – I want to also include D:. There are many way to do – this – and I will go through them. First – I could simply Insert a new line for Windows Server 2003 Logical Disk – and replicate the line I have – adding one for D:
Only one problem – this is an “AND” grouping – I really need this to be an “OR” grouping to include both C: and D: drives. You can switch this grouping the in UI, just right click the word “AND” and change it to an OR grouping:
This formula now looks like:
( Object is Windows Server 2003 Logical Disk AND ( Device Name Equals C: ) OR ( Device Name Equals D: ) )
So far – so good.
Now – what if I ONLY want C: and D: disks, that are HOSTED by specific Windows Computers? I can do that too! Lets say I want a group – of all the C: and D: logical disks, on servers that begin with the name “SR______”
If you look at the bottom of the list of properties for Logical Disks – you will see (Host=Windows Computer). From here – we can pick any attribute of the Windows Computer class as well to add to our expression – to limit our logical disks in our group to very specific Computers.
Go back to the properties of your group, edit the Dynamic Members, and you can construct something like this:
Which translates to the following formula:
( Object is Windows Server 2003 Logical Disk AND ( Windows Computer.NetBIOS Computer Name Matches wildcard sr* ) AND ( ( Device Name Equals C: ) OR ( Device Name Equals D: ) ) )
Now – I will be honest – getting all the “ands” and “ors” in the right place using the UI is a big pain. It is very easy to screw it up. I like to simplify this to the fewest lines possible – using Regex.
Using Regular Expressions – we can use modifiers to create very advanced expressions. my favorites are ^ which means the beginning of a new line or word, and | which is the “pipe” symbol – which means “or”.
So a simple way to accomplish the same example above – without all the complexity – is this:
However – you might notice – this doesn’t work right. This is because Regex is case sensitive. If the Server NetBIOS name is detected in all CAPS, this expression wont match. I talk a little about this issue in this post: http://blogs.technet.com/kevinholman/archive/2009/04/21/quick-tip-using-regular-expressions-in-a-dynamic-group.aspx
So – based on that posts example – there is a simple way to make a RegEx case insensitive: (?i:blah)
Using that as an example – we can now make very advanced groupings, quite easily:
(?i: to make it case insensitive. ^ to signify the beginning of the word/line match. Here is the formula now:
( Object is Windows Server 2003 Logical Disk AND ( Device Name Matches regular expression (?i:^C|^D) ) AND ( Windows Computer.NetBIOS Computer Name Matches regular expression (?i:^sr) ) )
Check it out:
What if I wanted all logical disks that we NOT hosted by a Virtual Machine? Easy!
( Object is Logical Disk AND ( Windows Computer.Virtual Machine Equals False ) AND True )
This reveals a group of ALL logical disks hosted by a Windows Computer with the attribute of Virtual Machine = False:
As you can see – using the Hosting relationship of the disk – to the Windows Computer object, there is much more you can do with groups.