Archive for August 2009

Courion Tip – which CLIENT did that run on?   Leave a comment

Or, more properly, which PC fired off the workflow… Well, this is actually built into Courion, so all we have to do is add a couple of columns to the ticketing table to store the information.

CLIENT_HOST_NAME varchar(20) Allow Nulls
CLIENT_IP_ADDR varchar(16) Allow Nulls

  1. Restart the Courion service
  2. Under Actions, Password Reset, Ticketing Configuration, click on Modify
  3. In your ticketing events,  check the Active box next to the new entries
  4. Assign these to use the built in functions:


 Now you have an audit of which computer host name and which IP address the password changes were done from.



Posted August 31, 2009 by mmdmurphy in Courion Tip, tips

Tagged with

Courion Tip – which server did that run on?   Leave a comment

I have more than one server I am responsible for, and, despite my best efforts (and/or during changes) they might not be identical w/r to the workflows. So, it’s pretty handy to keep track of which server it ran on. This is easily tracked by creating a custom macro called %Custom Macro.GetServerName% – this is a VBScript Macro, return type of text, set to:

Dim strServerName
strComputer = “.”
Set objWMIService = GetObject(“winmgmts:\\” & strComputer & “\root\cimv2”)
Set colItems = objWMIService.ExecQuery(“Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled = True”)
For Each objItem in colItems
‘ WScript.Echo”Description: ” & objItem.Description
‘ WScript.Echo “Physical (MAC) address: ” & objItem.MACAddress
‘WScript.Echo “Host name: ” & objItem.DNSHostName
strServerName = objItem.DNSHostName
‘If Not IsNull(objItem.IPAddress) Then
‘ For i = 0 To UBound(objItem.IPAddress)
‘ WScript.Echo “IP address: ” & objItem.IPAddress(i)
‘ Next
‘End If
‘If Not IsNull(objItem.IPSubnet) Then
‘ For i = 0 To UBound(objItem.IPSubnet)
‘ WScript.Echo “Subnet: ” & objItem.IPSubnet(i)
‘ Next
‘End If

NativeScript = strServerName

Now, just add something like this to the end of your notifications and summary screens:

<br>  Server: %Custom Macro.GetServerName% Workflow: %Workflow Name%

Posted August 31, 2009 by mmdmurphy in Courion Tip, tips

Tagged with

Courion Tip – add date time stamp to user profile   Leave a comment

You want an easy way to keep track of when a user registered their user profile (aka set up their challenge response questions)? Simply add a column called ModifyDate to the profile table in SQL server, set it up as smalldatetime, and restart your courion service..

Now go into administrator, and modify your workflow, under Actions, Change, Action Settings, Unique Resource Data and scroll down to the ModifyDate you’ve just added. Use the (Courion) built in fuction %CURRENT_TIMESTAMP%.

Whenever  a new or existing user changes their challenge response questions, you’ll have a date time stamp of when that occured. Great not only for trouble shooting, but also for those pesky auditors…

Posted August 30, 2009 by mmdmurphy in Courion Tip

Tagged with

Mac on a PC   Leave a comment

Not going to discuss legal situation…

Posted August 28, 2009 by mmdmurphy in tips

Courion Tip – User Friendly emails   Leave a comment

This could wind up being a multi part post, but I thought I should get started…

Step #1, add a GUID column to your ticketing table.  I called mine GUID, and set it to varchar(40) and checked the “Allow Nulls” column. As with any changes to the SQL Server database in Courion, restart the Courion service to pick up the change. Now we have a Globally Unique IDentifier column we can use in the ticketing database.

Step #2, add a custom macro to populate your GUI, I called mine GetGUID, Return Type of Text, Native Query set to “SELECT NEWID()”, Use Optimization is NOT checked, and Cache Results IS checked. Now we have a custom macro we can use to set the GUID in the ticketing table.

Step #3, make sure the password reset workflows populate the GUID… Go into the workflows, Actions, Password Reset, Ticketing Configuration, Modify, and for both the Resource Failure and Resource Success, scroll down to GUID, check it to make it active, and set it to %Custom Macro.GetGUID%. Now, whenever a user submitts a password change, successful on a given target or not, we have a means to aggregate that all of the individual responses of that instance of a workflow running together into one…

Step #4, add a column to your PickList table, called HTML_TableRowColor.  (I made the values italic so you would know to include the quotation marks….) If you think about the implications of this, you could ‘color code’ just about any result. However, I haven’t done anything other than success (green) and failure (red).

For a Status Code of 11 (Failed), I set HTML_TableRowColor to bgcolor=”#FFCACA” and, for a Status Code of 16 (Success), I set HTML_TableRowColor to bgcolor=”#DFF4E0″

Step #5, create a view that combines the Target ID Mapping, the Ticketing Table and something I cant think of right now. I called mine User_Friendly_Ticketing_Info:

SELECT     TOP (100) PERCENT dbo.Picklist.HTML_TableRowColor, dbo.Ticketing.Provisioner, dbo.Ticketing.Provisionee, dbo.Ticketing.Date,  dbo.TargetIDMapping.CommonName, dbo.Picklist.PickListValue, dbo.Ticketing.TargetStatus, dbo.Ticketing.TargetID, dbo.Ticketing.GUID, dbo.WorkflowConfig.Description, dbo.Ticketing.Workflow
FROM         dbo.Ticketing LEFT OUTER JOIN
                      dbo.WorkflowConfig ON dbo.Ticketing.Workflow = dbo.WorkflowConfig.WorkflowName LEFT OUTER JOIN
                      dbo.TargetIDMapping ON dbo.Ticketing.TargetID = dbo.TargetIDMapping.UBTName LEFT OUTER JOIN
                      dbo.Picklist ON dbo.Ticketing.WorkflowStatus = dbo.Picklist.PickListID
ORDER BY dbo.Ticketing.Provisionee, dbo.Ticketing.Date, dbo.Picklist.PickListValue

Step #6, create a custom macro called FriendlyResults and set it to Return Type of Text and the Native Query String

set to SELECT ‘<tr’ AS Expr1, HTML_TableRowColor, ‘><td>’ AS Expr2, UPPER(Provisioner) AS Expr4, ‘</td><td>’ AS Expr3, Date, ‘</td><td>’ AS Expr5, CommonName, ‘</td><td>’ AS Expr6, Description, ‘</td><td>’ AS Expr7, PickListValue, ‘</td><td>’ AS Expr8, TargetStatus, ‘</td></tr>’ AS Expr9
FROM User_Friendly_Ticketing_Info
WHERE (Provisionee = ‘%Provisionee Community.User%’) AND (GUID = (SELECT DISTINCT GUID FROM User_Friendly_Ticketing_Info AS User_Friendly_Ticketing_Info_2 WHERE (GUID IS NOT NULL) AND (Date = (SELECT DISTINCT MAX(Date) AS Expr10 FROM User_Friendly_Ticketing_Info AS User_Friendly_Ticketing_Info_1 WHERE (GUID IS NOT NULL))) AND (Provisionee = ‘%Provisionee Community.User%’))) ORDER BY PickListValue ASC, CommonName ASC

That probably deserves a great deal of explanation, but I am not sure I can actually give it. Basically, you want to find the lastest (MAX(Date)) GUID associated with a particular user ID… And then aggregate all that together.

Step #7, modify the summary screens. For instance, I have a self service password reset workflow, so, under Actions, Password Reset, Summary, I set the Summary Form, Summary Details to this:

%Custom Macro.GetSystemHelpDeskInfo%
<table border=”1″ width=”100%”>  <tr><th width=”10%”>Performed by</th>  <th width=”10%”>Date/Time</th>  <th width=”25%”>Target</th>  <th width=”25%”>Workflow used</th>  <th width=”10%”>Results – brief</th>  <th width=”20%”>Results – detailed</th>  </tr>  <tr>%Custom Macro.FriendlyResults%  </tr>  </table><br>Server: %Custom Macro.GetServerName% Workflow: %Workflow Name%

(I will post about the %CustomMacro.GetServerName% at a later date)

Step #8, modify the notification section, message text to this (basically the same…) Note I show the PasswordResetFailureMessage. I have also done the success message

%Custom Macro.PasswordResetFailureMessage% %Custom Macro.PasswordRules% <table border=”1″ width=”100%”>  <tr><th width=”10%”>Performed by</th>  <th width=”10%”>Date/Time</th>  <th width=”25%”>Target</th>  <th width=”25%”>Workflow used</th>  <th width=”10%”>Results – brief</th>  <th width=”20%”>Results – detailed</th>  </tr>  <tr>%Custom Macro.FriendlyResults%  </tr>  </table>      <br>  %Custom Macro.GetSystemHelpDeskInfo% <br>  Server: %Custom Macro.GetServerName% Workflow: %Workflow Name%



NOTE – I removed all indentifying marks at the request of the company I work at. 



Posted August 28, 2009 by mmdmurphy in Courion Tip, tips

Tagged with

Courion Tip – what server am I on?   Leave a comment

I have several servers I run, and the Courion screens all look the same. So, how can you EASILY tell which server you are on?

Well, I created a “dummy” workflow called A_ServerName (where Server Name is the name of the server, not literally ServerName). It shows up first on the list of workflows, so an easy glance shows you which server you are on. And since it really isn’t populated, you won’t “take a hit” by implementing it (of course, all workflows have SOME overhead, but in this case it’s minimal)

Posted August 27, 2009 by mmdmurphy in Courion Tip, tips

Tagged with

Supporting more than 4 gig of ram in a 32 bit system

I HAVE NOT tried this, but I am interested…

Posted August 26, 2009 by mmdmurphy in tips, windows

Tagged with