Xapity Blog

PowerShell for SCSM: Working with History Tab Information

A question came up in the forums about assigning an Service Request (SR) to the user that had put the SR On Hold. The solution that I thought of involved getting the history on the SR and finding the username of the analyst that put the SR On Hold.

SCSM PowerShell Activity

This blog outlines some general examples of PowerShell code that will help when dealing with History tab information and includes the full script example of assigning the SR to the analyst that put the SR On Hold.

Define Classes and Relationships

First define any relationships and Classes that you might need. I am using the example from the forum post, so will use Service Request. You should be able to modify the examples below for other work items.

Import-Module SMLets -Force

$WorkItemID = "SR132"

$WorkItemClass = Get-SCSMClass System.WorkItem.ServiceRequest$

$WorkItemObject = Get-SCSMObject -Class $WorkItemClass -Filter "Id -eq $WorkItemID "

Get the History Information

Now we can get the History tab information from the SR object:

$History = Get-SCSMObjectHistory -Object $WorkItemObject

This will give us the following:

SCSM History Tab Information in PowerShell

You can see that each update has a time stamp and User. Each update contains a list of the values that have been made or updated.

Properties on History

If we look at the Properties on $History we can see that we are probably interested in the $History.History property.

$History | Get-Member

SCSM PowerShell Get Member Properties

Changes on the History Tab

We can now loop thorough the changes that were made looking at the $History.History property.

foreach ($Change in $History.History ) { Write-Host $Change |FL }

SCSM PowerShell History Tab Changes

Not as useful as you would expect.

Properties on each Change on the History Tab

So let's look at the properties on each Change in the above loop.

$Change | Get-Member

And we are most interested in the contents of the $Change.Changes list property.

SCSM PowerShell History Properties

Loop to get each Value update

So we will loop through each update ($Change.Changes property) made in each of the History changes:

foreach ($Change in $History.History ) { foreach ($Update in $Change.Changes ) { { Write-host "Update entered by $($Change.Username) " $Update | FL } }

Now we can see what values have changed, both the old and new values, who made the change and what type of change it was. This is what we wanted!

SCSM PowerShell Loop to get History Tab Values

From this point you can collect the data and use it as required.

Full Script

In the Forum example and the Full Script, I added in the Enums for SR In Progress and SR On Hold, added the User class and Assigned To relationship references.

By looping through the changes looking at the Old Value enum for In Progress and New Value enum for On Hold, I was then get the user that made the change and able to set the Assigned to user on the SR to the last analyst to put the SR on Hold.

Download Script: PlaceSRonHold.zip

Read more PowerShell for SCSM Blogs

Xapity PowerShell Activity for Microsoft SCSM

Xapity PowerShell Activity

The Xapity PowerShell Activity is an Activity for Microsoft SCSM that enables PowerShell scripts to be run in SCSM activity workflows. Automate more of your processes directly in SCSM. Scripts are stored and updated from a central script repository. The scripts execution output can be viewed and if a failure occurs, an email notification can be sent.

See more Xapity Product videos

Xapity - Innovative Software for SCSM - Discover our Products

#PowerShellActivity #Tips #PowerShell #SCSM

Featured Posts
Recent Posts