Using SMLets Beta 3 Post #1 – Using Get-SCSMObject, Get-SCSMClass to Dump Data from SCSM

Using SMLets Beta 3 Post #1 – Using Get-SCSMObject, Get-SCSMClass to Dump Data from SCSM

  • Comments 7
  • Likes

Yesterday we released SMLets Beta 3.  This will be the first in a series of posts on using SMLets Beta 3.

To start out with let’s answer a question in the comments on the release announcement blog post from Sam:

I also wanted to ask you about the which table in the database that contains the user information. I know that the BaseManagedEntity table contains the user ID and the display name but where the other information is stored? If i wanted to get a list of all user and their information in the system where can i get that?

The issue that i am trying to resolve is that in some cases you select a user from the user selection window but the display name is returned as a different user! based on my analysis, it seems that there was an error in the import date file i used so i am trying to fix that.

So – to get started with let’s see a quick example of using the Get-SCSMObject cmdlet. 

Before we begin make sure you have the SMLets Beta 3 installed.  Then open a PowerShell window and Import the Module.

image

Note – if you are running these cmdlets remotely from the SCSM server, you will need to add the –ComputerName <your SCSM server name> parameter to the end of all the cmdlet examples below.

If you run just Get-SCSMObject without any parameters PowerShell will prompt you for the –Class required parameter.

image

In SMLets Beta 3, the class must be passed as a ManagementPackClass object not simply the name.  Fortunately, we have also provided a Get-SCSMClass cmdlet.  To get the class you need to know the class name.  For example:

image

Notice how multiple classes are returned, but they all start with System.WorkItem.Incident.  Since we only want the System.WorkItem.Incident class we can add a $ to the end of the name to tell PowerShell to only get us the System.WorkItem.Incident class:

image

Nice.  Now we just need to store this in a variable:

image

Now we can pass the $IncidentClass to the Get-SCSMObject –Class parameter:

image

We can also shorten this as follows.

image

Unless you need to use the incident class as a variable to something else later this is probably a shorter/faster way to get what you want.  You can also pass the class through the pipeline:

image

So – you may be wondering how you get the class name in the first place.  Well – just use the Get-SCSMClass cmdlet to figure it out (or you can use the model Visio diagram) assuming you know at least part of the name:

image

If you know the display name but have no idea what the name is you could do something like this:

image

OK – so let’s apply what we learned here to Sam’s question:

First we need to know the Name of the user class…

image

We don’t need any of the Abstract classes so we can filter those out like this:

image

So – we can safely assume that the correct class is probably Microsoft.AD.UserBase, Microsoft.AD.User, or System.Domain.User, but which one??  This might be a case where you want to consult the Visio model:

image

You can also look up the base classes of a given class by doing this:

image

Cool!

So – assuming we care about Users and Groups lets use the Microsoft.AD.UserBase class.  Let’s get all the users in the system…

image

Alright!  Now let’s say we want to look at certain properties of the users.  We can pipe the output to a Format-Table cmdlet and specify the properties we want to see in the columns:

image

Super!  Now, lets say we want to sort the data so it is easier to consume. Use the Sort-Object cmdlet in the pipeline before the Format-Table.

image

Can this get any more awesome?  Yes!

Let’s say we only want to get users that have a UserName that starts with ‘A’.  We can do that using the Filter parameter like this:

image

Note: DO NOT use Where-Object to filter records.  See this blog post to learn more.

OK – now – how do you know which properties are available on a given class to query by or to display?  Use the Get-Member cmdlet!

image

This will show you all of the methods that are available on the objects and the properties.

So – to finally answer Sam’s question….. You can do something like this to find all the users that have a particular display name.

image

Note – you could of course do all of this in the Users view in the UI but what fun is that?

image

In the next blog post we will see why figuring this stuff out in PowerShell can be extraordinarily powerful - we’ll look at updating objects using Set-SCSMObject!

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • This is fantastic.

    Thanks Travis, i used this and some other powershell send-email and I am now using CreatedAfter paramaeter to get a quick breakdown of all open, resolved, closed and pending calls for a specified time frame. SMLets is AMAZING. If anyone is interested, i will gladly provide script :)

    Thanks again Travis :)

  • @Fletcher -

    Cool!  Please share!  Maybe it would be a good candidate for the TechNet gallery for SCSM?

    blogs.technet.com/.../service-manager-on-new-technet-gallery-beta.aspx

  • @Travis -

    It is around 40 lines of code.

    Should I copy and paste?

    Or can you suggest a beeter way?

    Thanks,

    F.

  • @Fletcher -

    Sure, copy/paste here is fine.  Or you can package it up and share it on the gallery.  Thanks!

  • Hi all,

    hope this helps. :)

    gallery.technet.microsoft.com/SCSM-Call-Break-with-E-64da681e

    F.

  • Thanks for sharing Fletcher!

  • I am stuck with SMLets for more than a month now. Even after successful import of various available versions I see limited commands like GetSCSMConnector.

    I am simply unable to get a hands on Get-SCSMObject or Get-SCSMClass.      These are not even listed under Get-Help *

    I have confirmed that the service manager module is loaded and I am launching with admin rights. I am running them right on Management Server and logged in as Service Management account !

    Please let me know if I am missing something here. This is hampering development.

    Any help will be appreciated.

    Pgoyal  at Xavient dot com