Quantcast
Channel: The Official System Center Service Manager Blog
Viewing all 562 articles
Browse latest View live

Service Manager Roadmap Update – What’s Coming?

$
0
0

At Tech Ed Africa and Tech Ed Europe in the past few weeks we have publicly unveiled more of the roadmap for Service Manager.  Below are a couple of the slides that were shared.

SP1 is a release that is focused only on the following things:

  • Bug fixes – includes all the bug fixes in cumulative updates 1, 2, and 3.
  • Support for SQL 2008 R2
  • 9 additional languages for the entire product (not just the portal)
    • Czech
    • Danish
    • Finnish
    • Swedish
    • Greek
    • Dutch
    • Norwegian
    • Portuguese (Portugal)
    • Polish

The next major release is currently called “R2” and will include:

image

As each of these areas is currently in design/development right now we aren’t really going into details about the specifics, but we did want to share with you some of the new and exciting things we are currently working on.  This next release will line up with the planned next SCOM, SCCM, and SCVMM releases.  We’ll update the connectors in SCSM as needed to work with those new versions as well.

Here’s the timeframes (unchanged from the announcement at MMS 2010):

image

V1, Authoring Tool, and Compliance/Risk MP are released now.  SP1 release is targeted for “around the end of the year”.  We are in the final testing phases now with zero bugs meeting the bar left to fix for SP1 right now.  The R2 beta will be sometime in the middle of CY 2011 and the R2 release in the second half of 2011.

The SCSM “R2” TAP program is in full swing now.  We have been demonstrating some of the new builds with these features already working to the TAP customers and partners to get feedback.  Great to see the rapid progress on new developments while also seeing customers rapidly adopting and deploying SCSM 2010.


Breaking All the Rules: Reactivating Closed Incidents

$
0
0

OK – so ITIL/MOF best practices say that you shouldn’t reactivate or edit incidents which are in the Closed state and that you should create a new incident in that case.  I’m of the opinion that the intention of this is if the end user is re-raising the issue.  That makes sense to me (sort of).  So – in SCSM if you open an incident which is the Closed status you can’t edit it in any way and you can’t change the status back to Active or Resolved.  The whole form is disabled.  Interestingly, you can still change the extended property values and save those changes.

At any rate, there have been enough cases that customers have raised where it makes sense to allow editing a closed incident that I’m going to show you how to do that.  Here are just a couple of the cases:

1) You need to update the time spent on the incident, because somebody forgot to (or couldn’t) log it before the incident was closed.

2) The incident was flagged as ‘requires knowledge article’.  The knowledge manager has now provided a knowledge article and needs to unflag that incident so it doesn’t keep coming up in his “to do” list.

So – here is how you can enable reactivating closed incidents.

1) First download and install the SMLets cmdlets from http://smlets.codeplex.com

2) Import the attached MP.

You’ll see a new task in the task pane when you have an incident selected:

image

Just click that and it will change the status.  You may see a warning message like the one bloe that confirms that you want to run the script associated with importing the SMLets module:

image

You can get rid of this by opening Windows explorer to the .psm1 file mentioned in the dialog above, right click on it, and choose properties.  Then click the Unblock button.

You’ll need to refresh in order to be able to see the change in status.

Managment Pack download

Here’s a similar solution that Patrik built:

http://blogs.litware.se/?p=646

Opalis 6.3 with Integration Pack for SCSM is now RTM!

$
0
0

Congratulations to our good friends in the Opalis team on the RTM of Opalis 6.3!

Included in Opalis 6.3 are:

  • New Integration Packs for Configuration Manager, Data Protection Manager, Service Manager and Virtual Machine Manager
  • An updated Integration Pack for Operations Manager to support the Server 2008 platform
  • Support for the Opalis infrastructure to run on the Server 2008 platforms

They tell me that the Service Manager integration pack is the best one they have ever built and I believe them.  The power of using Opalis + Service Manager is really almost too much to handle.  At Tech Ed Europe last week we had an audience member at one of our sessions say “We are so excited about this [Opalis + SCSM] that we can hardly control our emotions!”  I though he was about to break out into a song/dance.  : )

In case you missed it here is an example of SCSM and Opalis better TOGETHER!

How to Automate VM Provisioning in 20 Minutes using Service Manager and Opalis

Lots more demo videos to come!

Why Won’t My MP Import? The Case of the Required Property Without a Default Value

$
0
0

This situation has come up a couple of times now so it seems worth of a blog post.  Here’s the situation – a customer is using the SCSM Authoring Tool to extend a class and add a new property.  The customer marks the value as required because the user’s should enter a value for the property each time and object of that class is created.  Now the customer tries to import the MP and get’s this error message:

image

“The value specified for DefaultValue is not valid.”  What does that mean?  The customer didn’t even specify a Default Value!  Why would the customer specify a Default Value when the purpose of making the property Required is because the customer wants the user to choose a value each time?  Sometimes a default value might make sense, but lots of times it won’t so why is a Default Value mandatory if the customer makes the property Required?

Here’s the reason:

Consider that essentially for each class there is a corresponding database table.  Each property defined on the class is essentially a column on that table.   The data type of the property defined in the MP defines the data type of the column in the table.  If you define things like max value, min value, max length, min length, etc. on the property those are reflected as additional constraints on the column in the table.

In this case if you say that a property is Required, that is the equivalent of making the column in the table be Nullable=False (means that every row in the table must have a value for that column).

If you were to import this MP into a SCSM system that had no data in the table this would probably work (I haven’t tested it).  If you import it into a SCSM system that already has data in the table (and you don’t specify a default value) you will get this error because SQL doesn’t know what value to put into the new non-nullable column for each of the existing rows!  If you provide a DefaultValue for that property in the MP then you can import the MP and it will set the value for that column for all existing rows to the default value.

In this particular case the customer raised the situation is a little more interesting because the data type of the property was enum/list data type.  That means that the default value must point to the ID of an enum/list item.  If you choose the ID of the root enum type that is created when you define a new list then the list value picker in the form will still be blank initially so the user is forced to select an item.

In MP XML it would look like this:

    <EntityTypes>
      <ClassTypes>
        <ClassType ID="ClassExtension_544dcd7b_f44b_4cbf_9310_c7d27377beb9" Extension="true">
          <Property ID="CustomExtension" Type="enum" Key="false" Required="true" EnumType="TestList" DefaultValue="TestList" />
        </ClassType>
      </ClassTypes>
      <EnumerationTypes>
        <EnumerationValue ID="TestList" Accessibility="Public" />
      </EnumerationTypes>
    </EntityTypes>

You should also just be able to enter ‘TestList’ in the Required Value field in the Properties Pane.  It just needs to be the same as the ID that you entered for the list ID.

image

Using ObjectQueryOptions – Configuring Object Retrieval from the CMDB, Part II

$
0
0

Pratibha has followed her original post on using the ObjectQueryOptions in the SDK to control how you retrieve objects with a new post that explains some more of the details on this.

You can find the new post here:

http://blogs.msdn.com/b/scplat/archive/2010/11/15/using-objectqueryoptions-configuring-object-retrieval-from-the-cmdb-part-ii.aspx

and this is the original blog post if you missed it:

http://blogs.msdn.com/b/scplat/archive/2010/09/01/using-objectqueryoptions-configuring-object-retrieval-from-the-cmdb.aspx 

Thanks Pratibha!

Using And/Or Criteria in Workflow and Notification Subscriptions

$
0
0

First let’s make sure we understand some logical concepts related to criteria.  If I say the criteria for selecting a movie is:

Rating is greater than 4 stars

MPAA rating is not equal to Rated R

Genre is Comedy, Action, Drama

I am not being clear enough about what my criteria is.  Do I mean that the movie can meet any of those criteria and be acceptable?  Or do I mean that the movie must meet all of those criteria?  Does the movie have to be Comedy, Action, and Drama all in one?

What if I was more specific in my criteria and said:

(Rating is greater than 4 stars

AND

MPAA rating is not equal to Rated R

AND

(Genre is Comedy OR Action OR Drama))

If this was my criteria clearly something like Lord of The Rings: Two Towers would meet the criteria but something like Snakes on a Plane would not.  Snakes on a Plane is not rated 4 stars or better and is Rated R.  It could be considered an ‘Action’ movie or a ‘Comedy’ movie I guess depending on your point of view, but it doesn’t meet the other two criteria anyways so it’s out.

Now consider how grouping the clauses differently returns different results.

(Rating is greater than 4 stars

AND

MPAA rating is not equal to Rated R)

OR

(Genre is Comedy OR Action OR Drama)

With this criteria Snakes on a Plane could be considered to meet the criteria since it could be considered an action (or a comedy) movie and the movie either has to be a comedy, action or drama movie OR be both a 4+ stars movie an not rated R.

Now let’s apply this concept to workflow/subscription criteria…

When you are creating notification subscription criteria in the console each criteria that you add to the criteria builder is AND’ed together with other criteria.  For example I could say ‘when an incident is created and the source = Portal and the title contains ‘foo’ and the urgency = high like this:

image

If I want to I can OR multiple list values from the same list together by adding the list data type property to the criteria more than once and choosing different list values like this:

image

This is equivalent saying this:

(Source = Portal

AND

Title contains ‘Foo’

AND

(Urgency is High OR Medium))

Now – here is some criteria that a customer was trying to do:

clip_image002

The customer’s intention was to fire the workflow whenever the incident matched this criteria:

Source Does Not Equal ‘Portal’

AND

Source Does Not Equal ‘Console’

In other words ‘fire if source is anything except portal or console’. But because the criteria is OR’d together when you use multiple values from the same list it looks like this:

Source Does Not Equal ‘Portal’

OR

Source Does Not Equal ‘Console’

So – let’s take some examples – if the source is ‘Portal’ will this workflow be triggered? Yes! Because while it doesn’t meet the criteria in the first clause it does meet the criteria in the second clause and since they are OR’d together only one of them must be true to fire the workflow.  What if the source was ‘Console’?  The criteria would be met by the first criteria but not the second and so it would fire.  It would also fire if the source were ‘Email’ since it matches both criteria.  This is clearly not what the customer intended.  What to do?

Two options:

1) Since you are dealing with a finite set of sources you could create your criteria to look like this instead:

Source Equals ‘Email’

OR

Source Equals ‘Compliance’

OR

Source Equals ‘Phone’

OR

Source Equals ‘Configuration Manager (DCM)’

OR

Source Equals ‘System’

OR

Source Equals ‘Operations Manager’

Basically you are matching any criteria other than Console or Email.  That works in some cases where you have a relatively short finite list of items but it has some drawbacks.  If you ever added a new source to the list you would need to remember to update this criteria to include an OR clause for that as well.  It’s a little harder to tell at a glance what the conceptual intention of the criteria is.  Remember the conceptual intent of the criteria was to do something if the source was anything but Console or Portal.

2) You can export out the MP and change the XML from this:

                      <Or>
                        <Expression>
                          <SimpleExpression>
                            <ValueExpression>
                              <Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Incident_Library!System.WorkItem.Incident']/Source$</Property>
                            </ValueExpression>
                            <Operator>NotEqual</Operator>
                            <ValueExpression>
                              <Value>{6ef191ce-3124-2974-94fb-020c677f4017}</Value>
                            </ValueExpression>
                          </SimpleExpression>
                        </Expression>
                        <Expression>
                          <SimpleExpression>
                            <ValueExpression>
                              <Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Incident_Library!System.WorkItem.Incident']/Source$</Property>
                            </ValueExpression>
                            <Operator>NotEqual</Operator>
                            <ValueExpression>
                              <Value>{76480d55-a19d-7cef-4446-0f1ccaef11ce}</Value>
                            </ValueExpression>
                          </SimpleExpression>
                        </Expression>
                      </Or>

to this:

 

                      <And>
                        <Expression>
                          <SimpleExpression>
                            <ValueExpression>
                              <Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Incident_Library!System.WorkItem.Incident']/Source$</Property>
                            </ValueExpression>
                            <Operator>NotEqual</Operator>
                            <ValueExpression>
                              <Value>{6ef191ce-3124-2974-94fb-020c677f4017}</Value>
                            </ValueExpression>
                          </SimpleExpression>
                        </Expression>
                        <Expression>
                          <SimpleExpression>
                            <ValueExpression>
                              <Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Incident_Library!System.WorkItem.Incident']/Source$</Property>
                            </ValueExpression>
                            <Operator>NotEqual</Operator>
                            <ValueExpression>
                              <Value>{76480d55-a19d-7cef-4446-0f1ccaef11ce}</Value>
                            </ValueExpression>
                          </SimpleExpression>
                        </Expression>
                      </And>

Then, reimport the MP.

You can get MUCH fancier about your and/or criteria in XML than the UI will allow you for now. We’ll try to expand the possibilities of what the UI can handle in future releases but for now this is all you can do:

1) AND criteria from multiple properties together (e.g. Title contains ‘Foo’ AND Source equals ‘Email’)

2) OR list values from a single list together (e.g. Source equals ‘Email’ OR Source does not equal ‘Portal’ OR Source equals ‘Operations Manager’)

If you need more complicated criteria than that you can set up virtually anything in the XML as far as AND/OR criteria goes.

FAQ: How Can I Enable Non-Admins to Create/Edit/Delete Announcements?

$
0
0

The security matrix for SCSM allows for users in a Advanced Operator, Author, or Administrator user role to create & edit announcements.  Only problem is that the Announcement view out of the box is only in the Administration workspace which only admins can see.  If you want to be able to have non-admins manage announcements you just need to create an announcements view in the configuration items workspace.  Or just import the MP attached to this blog post.

image

You’ll get the same tasks as in the Announcements view in the Administration workspace view:

image

Make sure you use that Delete task and not this one:

image

The second one there actually deletes the object from the database instead of just hiding it from the view.  Only admins can do the actual delete.

In the attached zip file you will find:

1) The .mpb file.  Import this if you just want the functionality.

2) The .xml source file for the MP if you want to make some customizations in XML

3) The image files

Class Property Data Types Explained In Detail

$
0
0

If you are not already familiar with modeling concepts please see this blog post first:

http://blogs.technet.com/b/servicemanager/archive/2010/04/05/modeling-in-system-center-service-manager.aspx 

When you define a property on a class you need to choose a data type for that property.  Sometimes this is obvious – if you are going to store a date property value choose the datetime data type.  If you are going to be storing a true/false value choose a Boolean value.  This blog post will provide a comprehensive explanation of the different data types that are available to help you choose which one is right to store your data.

These are the data types as defined by the 1.1 version of the MP Schema:

  <xsi:simpleType name="ManagementPackEntityPropertyTypes">
    <xsi:restriction base="xsd:string">
      <xsi:enumeration value="int"/>
      <xsi:enumeration value="decimal"/>
      <xsi:enumeration value="double"/>
      <xsi:enumeration value="string"/>
      <xsi:enumeration value="datetime"/>
      <xsi:enumeration value="guid"/>
      <xsi:enumeration value="bool"/>
      <xsi:enumeration value="enum"/>
      <xsi:enumeration value="richtext"/>
      <xsi:enumeration value="binary"/>
    </xsi:restriction>
  </xsi:simpleType>

They are the same data types as found in the version 1.0 MP schema used in SCOM/SCE 2007 (including R2) except that there are three new data types (highlighted) in the 1.1 version of the schema used in SCSM.  SCOM v.Next will pick up those new data types when it adopts the newest version of the common MP schema.

Each data type value results in a column being created in a SQL Server database table.  That column in the SQL Server database table has to be of a SQL Server data type.  This is how the mapping works:

MP Schema Data Type

SQL Server Column Data Type

PropertyType Value on the ManagedTypeProperty Table

Notes

int int 0

-2^31 (-2,147,483,648)

to

2^31-1 (2,147,483,647)

4 bytes

decimal decimal 1

Precision: 38
17 bytes

double float 2

- 1.79E+308

to

-2.23E-308

,0,

and

2.23E-308

to

1.79E+308

Precision: 53

8 bytes

string nvarchar(n) 3 n = the value of the MaxLength attribute defined on the Property element.

Default n = 256
Max: the maximum storage size is 2^31-1 bytes

Special note:
values of any property that has n > 4000 will not be copied to the data warehouse.
datetime datetime 4 Precision: 23

8 bytes
guid uniqueidentifier 5 16 bytes
bool bit 6 1 = TRUE
0 = FALSE

<1 byte
enum uniqueidentifier 7 Stores a GUID which is effectively a foreign key from the EnumType table and represents the currently selected EnumerationValue (aka “List Item”)

16 bytes
richtext nvarchar(n) 8 n = the value of the MaxLength attribute defined on the Property element.

Default n = 256

Special note:
values of any property that has n > 4000 will not be copied to the data warehouse.

Special note: use this data type to store property values which are in RTF format.
binary uniqueidentifier is a foreign key to a table that has a varbinary(max) field to store the binary data 9 varbinary(max) stores up to 2^31-1 bytes

16 bytes for the GUID FK

 

Some best practices:

  • Binary data and nvarchar with n > 4000 properties will not have their data moved to the DW in SCSM 2010.  Do not use those data types if you want your data to show up in the DW and reports.
  • Use datetime for storing date/time property values.
  • Use bool for storing True/False values.
  • Depending on the size of the number you want to store, choose int, decimal, or double.  Choose the smallest storage size possible given the range of numbers you expect.  Keep in mind that even if the number you store is ‘1’, if you use double it will store it as 8 bytes.  Avoid using decimal unless you really need that level of precision.
  • Use the smallest n that you know will fit your data.  If not sure, err on the high side.
  • Use binary data type for storing big chunks of data like file attachments, images, binary blobs, etc.
  • Use GUID for easily storing unique ID values.
  • Use enum for those properties where the values that are allowed come from a predefined list of values.  For more information on enums see this blog posts.

FAQ: Why is My Custom Incident View So Slow?

$
0
0

This one comes up pretty often – a customer creates a new incident view and uses the Incident (advanced) combination class (aka “type projection) as the target for the view.  Then the performance of the view is really slow.  This blog post will explain why and what you can do to improve the performance of views.

If you need a refresher on type projections please see this blog post:

http://blogs.msdn.com/jakuboleksy/archive/2009/01/20/getting-started-with-type-projections.aspx

If you use the Incident (Advanced) type projection for your view you are able to query by all these relationships (below) and you can use them as columns in a view (so long as the relationship type max cardinality is 1 and the object you want is only one “hop” away from the incident).

image

So – that has pretty much anything you could ever want to query about or display related to an incident.  Perfect right?  No!!  While it is very flexible it also means that the UI is going to pull back all that related object data even if it is not going to be displayed in the view!  Action logs, related configuration items, billable time, etc. are not things that you can’t even display in the view.  This is why views targeted at Incident (Advanced) are slow – because they are bringing back all this data.

If you want a fast view you need to use a type projection that includes only those components you need to query by and to display in the view.  These are the type projections that we provide out of the box in SCSM 2010:

image

Incident (advanced) is intended to be used for the incident form only.  You really don’t want to use this for a view.

Incident (portal) is intended for use by the portal and only gets a limited set of data.  This is the list of components (or relationships) that the portal type projection has:

image

This is still too many for most purposes in a view.

Incident (typical) is a good choice for views because it includes the affected user and the assigned to user component which are commonly used in view criteria or view columns.

image

There is only one problem with using the Incident (typical) type projection.  It is in an unsealed MP for some reason so you can only use it if the view you are going to create is also going to be stored in the same MP (Service Manager Incident Management Configuration Library) as the type projection.  If you create your view anywhere under the out of the box Incident Management node then your view will be in that same MP and it will be fine.

image

If you try to use the Incident (typical) type projection in a view in a different unsealed MP you’ll get an error message like this:

clip_image002

If you create your view someplace else in the tree you’ll need to create your own folder in your own MP. At that point you can only use type projections which are in some other sealed MP (or in the same MP as your folders/views).

You can do that yourself by opening the XML and creating a type projection that looks like this:

        <TypeProjection ID="System.WorkItem.Incident.View.ProjectionType" Accessibility="Public" Type="CoreIncident!System.WorkItem.Incident">
          <Component Path="$Target/Path[Relationship='WorkItem!System.WorkItemAssignedToUser']$" Alias="AssignedUser" />
        </TypeProjection>

Make sure you do these things if you create your own type projection:

  1. Give your type projection a unique ID.
  2. Don’t forget to add a display string for your type projection.
  3. Make sure that you include a MP reference for ‘CoreIncident’ and ‘WorkItem’ (or change the CoreIncident and WorkItem aliases to match your aliases if you already have these MP reference in your MP):

 

      <Reference Alias="CoreIncident">
        <ID>System.WorkItem.Incident.Library</ID>
        <Version>7.0.5826.216</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>
      <Reference Alias="WorkItem">
        <ID>System.WorkItem.Library</ID>
        <Version>7.0.5826.216</Version>
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
      </Reference>

Just to make things a little easier I’ve created an MP (attached) that you can just import that has a bunch of different type projections you can use.

Best practice:  Use the most “narrow” type projection that you can to get the data that you need to display and that let’s you specify the criteria you need.  Using just the incident class itself and not even using a type projection has the best performance.

If you import the .mp file attached there will be a lot more options to choose from:

image

I also included the .xml file in case you want to add some of your own or modify the ones that I provided.

Incident Escalation Workflows Using Opalis

$
0
0

A few customer have asked me how they can escalate incidents based on the time elapsed since the incident was opened if it is still active.  The typical requirement is something like this:

  • If the incident has been opened for more than 2 hours and the incident is still active reassign the incident to a different team/person and send a notification to that team
  • If the incident has been opened for more than 4 hours and the incident is still active reassign the incident to another team/person and send a notification to that team
  • And so on…

There is a limitation in the SCSM subscription infrastructure that makes it impossible to set up these kinds of workflows using the UI.  That limitation is that there is no way to set up a subscription that will run on a schedule and get objects that match certain criteria.  Normally subscriptions are triggered by the object changing state in some way.  For example you might want to trigger a notification to be sent when the incident is created or when the incident is updated and the support group property value changes.  In this case, you need the workflow to run regardless of whether the object changed state or not.

You could create a workflow in the SCSM Authoring Tool that used a PowerShell script to do this using the Get-SCSMObject | Set-SCSMObject cmdlets, but since not everybody is a PowerShell guru, Jim Pitts and I put together a demonstration for a customer on how to do this using Opalis the other day.  Especially if you already have Opalis set up this is a pretty easy workflow to create.  Jim even put together a blog post on how to do it.  Check it out here:

http://blogs.technet.com/b/opalis/archive/2010/12/03/opalis-6-3-incident-escalation-using-the-system-center-service-manager-ip.aspx 

Thanks Jim!

Setting Time Zone and Locale for Users in Bulk

$
0
0

Awhile back I made a post about setting the time zone property and local settings for users using CSV since those cannot be populated from AD automatically and are crucial to making sure email notifications are formatted properly.  Check out that post here:

http://blogs.technet.com/servicemanager/archive/2010/04/12/importing-users-via-csv-and-setting-locale-and-time-zone-information.aspx

Also see this blog post:

http://blogs.technet.com/b/servicemanager/archive/2010/04/27/sending-notifications-to-users-in-different-languages.aspx 

Brett Hamilton, an ITIL and service desk consultant in Australia has come up with a smart way to populate the Users’ locale and time zone property in bulk.  You can check out his solution on his sparkly, new SCSM blog:

http://scservman.wordpress.com/

Thanks for sharing Brett!

Using Opalis to Upload and Attach Files and Knowledge Articles

Authoring Workflows with PowerWF for Service Manager

$
0
0

One of our partners, PowerWF, has developed a really powerful workflow authoring tool for automating IT processes.  The way I describe PowerWF is that it helps break down the walls of interoperability between PowerShell and Windows Workflow Foundation workflows.  You can use PowerShell cmdlets in a Windows Workflow Foundation workflow as workflow activities.  You can publish a Windows Workflow Foundation workflow as a PowerShell cmdlet.  It allows people who aren’t really that familiar with PowerShell scripting (yet!) to be able to harness all the power of all those PowerShell snapins and modules out there to automate processes using a drag, drop, and configure workflow designer.  For people who are experienced with PowerShell the tool allows you to seamlessly go back and forth between editing PowerShell and configuring workflow activities.

This is one of the most exciting innovations I’ve seen recently.  As businesses are trying to reduce costs in these tough economic times, IT process automation using Windows Workflow Foundation, PowerShell, and Service Manager can really help!  Not only will you reduce costs through automation but you will decrease time to service request fulfillment and increase the quality of the service being delivered by reducing human error.  Just imagine the possibilities of automating things – anything that Microsoft, the community or other companies have released PowerShell cmdlets for – SharePoint, SQL Server, Exchange, Hyper-V, Windows Server, AD, Group Policy, SCSM, SCVMM, SCOM, VMWare, etc….  I have 2,100+ activities in my PowerWF toolbox on my demo system.  Automating them is only a drag, drop, configure, publish exercise.  Oh yeah – and test!  PowerWF makes that pretty easy too with the ability to set breakpoints, step through the workflow, inspection tools that you can use at any point in the workflow, etc.

While we haven’t tested this specifically yet, you should be able to use the output of a PowerWF-authored workflow assembly or PowerShell cmdlet in an Opalis workflow which really opens up the possibilities even further.

PowerWF released their current version 2.3 with Service Manager a few weeks ago.  That version allows you to publish workflows directly to SCSM via MP import and workflow binary distribution or you can produce a Windows Workflow Foundation activity that can be used in the SCSM Authoring Tool workflow designer.  As I was on the road for a few weeks recently, I showed this solution to a few different audiences to rave reviews.  You can find out more and get a trial version of PowerWF from their site:

http://powerwf.com/2010/12/service-manager-authoring-with-powerwf/

We’ll have some more interesting demo videos for PowerWF in the coming weeks, but here are some hello world and simple scenarios to get you started on the concept:

(Note: If you only have time to watch one video, check out the last one)

More Aggressively Grooming the JobStatus and WindowsWorkflowTaskJobStatus Tables

$
0
0

In some cases if you have a lot of workflows running, or workflows which run very frequently, or if the workflows have a lot of output the JobStatus and WindowsWorkflowTaskJobStatus tables can get pretty large.  Some customers are reporting sizes of up to 20-30 GB.  These tables store the output of workflows that run in the system.  Those workflows are almost always going to be successful and therefore are pretty uninteresting.  For the small percentage of workflows that fail for some reason though these tables store the status of those workflows, what time they started/ended, what the output was, and what the error was if any.  You can see this status information for workflows by selecting a particular workflow in the Workflows\Status view and then looking in the details pane:

image

By default Service Manager grooms these tables each night and deletes any data older than a configurable number of days in the past.  This configuration setting is stored in the database and not exposed anywhere in the console.  It’s stored on the PartitionAndGroomingSettings table.

SELECT * FROM PartitionAndGroomingSettings 

clip_image002


You can change the number of days to keep for running a query like this one below and changing the number to what you want.

update PartitionAndGroomingSettings set DaysToKeep = 3 where ObjectName = 'JobStatus'
update PartitionAndGroomingSettings set DaysToKeep = 15 where ObjectName = 'InternalJobHistory'
By making the number smaller you can more aggressively groom this table to keep the size smaller and also make the Workflows\Status view perform faster. The downside is that you won’t have as much history for troubleshooting purposes.  After making the change you’ll need to wait overnight for the next scheduled grooming job to run before you see a change in the size of the tables.

Solution: Improperly configured views in the Service Manager 2010 console generate the error "An error occurred while loading the items"

$
0
0

KBJust a quick heads up on a new Service Manager 2010 Knowledge Base article we published today.  If you ever see errors such as An error occurred while loading the items" while working in the Service Manager console then you'll want to keep this one in mind:

=====

Symptom

While working in the Service Manager 2010 console you may intermittently receive the following error:

An error occurred while loading the items

The full error text is as follows:

Application: System Center Service Manager Console
Application Version: x.x.xxxx.x 
Severity: Error 
Message: An error occurred while loading the items. 

System.NotSupportedException: In order to use differential updates, the Update or Remove adapter need to be specified. To disable differential updates, set the FullUpdateInterval to 1 
at Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter.DoAction(DataQueryBase query, IList`1 dataSources, IDictionary`2 parameters, IList`1 inputs, String outputCollectionName) 
at Microsoft.EnterpriseManagement.UI.DataModel.QueryQueue.StartExecuteQuery(Object sender, ConsoleJobEventArgs e) 
at Microsoft.EnterpriseManagement.ServiceManager.UI.Console.ConsoleJobExceptionHandler.ExecuteJob(IComponent component, EventHandler`1 job, Object sender, ConsoleJobEventArgs args)

Cause

This issue can occur when there are views that have RemoveItemsAdapter, AppendItemsAdapter and UpdateItemsAdapter adapters defined with a FullUpdateFrequency of 1. If this value is other than 1 then it should not be a problem with the view. For example, the My Incidents view has these adapters defined but its FullUpdateFrequency is 100.

The views that cause this error have the following under view definition:

<AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://Adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" RemoveItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" AppendItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" UpdateItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" DataSource="mom:ManagementGroup" FullUpdateFrequency="1" Streaming="true" IsRecurring="True" RecurrenceFrequency="{x:Static s:Int32.MaxValue}" xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">

The correct view definition would be as follows:

<AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://Adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" DataSource="mom:ManagementGroup" IsRecurring="True" RecurrenceFrequency="{x:Static s:Int32.MaxValue}" FullUpdateFrequency="1" Streaming="true" xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">

Note: We have fixed the code defect in Service Pack 1 for Service Manager 2010 so that this will no longer happen but views that already have this problem need to be manually fixed.

Resolution

To resolve the issue please follow the steps below:

1. In the Service Manager console, click Administration.
2. In the Administration pane, expand Administration, and then click Management Packs.
3. In the Management Packs pane, locate the management pack with name "Service Manager Incident Management Configuration Library" and select it.

Note: If you have your custom views stored in a separate management pack, then you need to take a similar approach to fix the views with incorrect definitions in those management packs.

4. In the Tasks pane, under the name of the management pack that you want to export, click Export.
5. In the Browse For Folder dialog box, select a location for the file, and then click OK.

Note: You cannot change the default name of the management pack file.

6. Before you edit the management pack file make a copy of this management pack.
7. Open the exported Management pack with your favorite text editor.
8. All the view definitions are stored under section <Views></Views>of the management pack.Locate the following element <Views> under the management pack. 
9. Now go through each view definition and if you find any view that have adapters RemoveItemsAdapter, AppendItemsAdapter and UpdateItemsAdapter defined with a FullUpdateFrequency of 1. Remove the adapters RemoveItemsAdapter, AppendItemsAdapter and UpdateItemsAdapter for those views.

Below is a sample view definition before and after the correction. You'll notice that RemoveItemsAdapter, AppendItemsAdapter and UpdateItemsAdapter are present in the incorrect view definition where as they are not present in correct view definition.

View before correction:

<View ID="System.WorkItem.Incident.AllIncidents.View" Accessibility="Public" Enabled="true" Target="CoreIncident!System.WorkItem.Incident" TypeID="SMConsole!GridViewType" Visible="true">
        <Category>NotUsed</Category>
        <Data>
          <Adapters>
            <Adapter AdapterName="dataportal:EnterpriseManagementObjectProjectionAdapter">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectProjectionAdapter</AdapterType>
            </Adapter>
            <Adapter AdapterName="viewframework://Adapters/AdvancedList">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter</AdapterType>
            </Adapter>
            <Adapter AdapterName="omsdk://Adapters/Criteria">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter</AdapterType>
            </Adapter>
          </Adapters>
          <ItemsSource>
  <AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://Adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" RemoveItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" AppendItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" UpdateItemsAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" DataSource="mom:ManagementGroup" IsRecurring="True" RecurrenceFrequency="{x:Static s:Int32.MaxValue}" FullUpdateFrequency="1" Streaming="true" xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">
              <AdvancedListSupportClass.Parameters>
                <QueryParameter Parameter="TypeProjectionId" Value="$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$" />
              </AdvancedListSupportClass.Parameters>
            </AdvancedListSupportClass>
          </ItemsSource>
          <Criteria />
        </Data>
        <Presentation>
          <Columns>
            <mux:ColumnCollection xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="http://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:datebinding="clr-namespace:Microsoft.EnterpriseManagement.UI.SdkDataAccess.Common;assembly=Microsoft.EnterpriseManagement.UI.SdkDataAccess">
              <mux:Column Name="id" DisplayMemberBinding="{Binding Path=Id, Mode=OneWay}" Width="150" DisplayName="Header_Id" Property="Id$ReturnValueAsBigInt$" DataType="s:String" />
              <mux:Column Name="title" DisplayMemberBinding="{Binding Path=Title, Mode=OneWay}" Width="200" DisplayName="Header_Title" Property="Title" DataType="s:String" />
              <mux:Column Name="aDisplayName" DisplayMemberBinding="{Binding Path=AssignedUser.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Assigned_To" Property="AssignedUser.DisplayName" DataType="s:String" />
              <mux:Column Name="sDisplayName" DisplayMemberBinding="{Binding Path=Status.DisplayName, Mode=OneWay}" Width="100" DisplayName="Header_Status" Property="Status.DisplayName" DataType="s:String" />
              <mux:Column Name="priority" DisplayMemberBinding="{Binding Path=Priority, Mode=OneWay}" Width="100" DisplayName="Header_Priority" Property="Priority" DataType="s:Int32" />
              <mux:Column Name="targetResolutionTime" DisplayMemberBinding="{datebinding:DateBinding Path=TargetResolutionTime, Mode=OneWay}" Width="100" DisplayName="Header_Target_Resolution_Time" Property="TargetResolutionTime" DataType="s:DateTime" />
              <mux:Column Name="affectedDisplayName" DisplayMemberBinding="{Binding Path=AffectedUser.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Affected_User" Property="AffectedUser.DisplayName" DataType="s:String" />
              <mux:Column Name="tDisplayName" DisplayMemberBinding="{Binding Path=TierQueue.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Support_Group" Property="TierQueue.DisplayName" DataType="s:String" />
              <mux:Column Name="lastModified" DisplayMemberBinding="{Binding Path=$LastModified$, Mode=OneWay}" Width="150" DisplayName="Header_Last_Modified" Property="$LastModified$" DataType="s:DateTime" />
            </mux:ColumnCollection>
          </Columns>
          <ViewStrings>
            <ViewString ID="Header_Id">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Id"]$</ViewString>
            <ViewString ID="Header_Title">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Title"]$</ViewString>
            <ViewString ID="Header_Assigned_To">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Assigned_To"]$</ViewString>
            <ViewString ID="Header_Status">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Status"]$</ViewString>
            <ViewString ID="Header_Priority">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Priority"]$</ViewString>
            <ViewString ID="Header_Target_Resolution_Time">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Target_Resolution_Time"]$</ViewString>
            <ViewString ID="Header_Affected_User">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Affected_User"]$</ViewString>
            <ViewString ID="Header_Support_Group">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Support_Group"]$</ViewString>
            <ViewString ID="Header_Last_Modified">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Last_Modified"]$</ViewString>
          </ViewStrings>
        </Presentation>
      </View>

View after correction:

<View ID="System.WorkItem.Incident.AllIncidents.View" Accessibility="Public" Enabled="true" Target="CoreIncident!System.WorkItem.Incident" TypeID="SMConsole!GridViewType" Visible="true">
        <Category>NotUsed</Category>
        <Data>
          <Adapters>
            <Adapter AdapterName="dataportal:EnterpriseManagementObjectProjectionAdapter">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectProjectionAdapter</AdapterType>
            </Adapter>
            <Adapter AdapterName="viewframework://Adapters/AdvancedList">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter</AdapterType>
            </Adapter>
            <Adapter AdapterName="omsdk://Adapters/Criteria">
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>
              <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter</AdapterType>
            </Adapter>
          </Adapters>
          <ItemsSource>
  <AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://Adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectProjectionAdapter" DataSource="mom:ManagementGroup" IsRecurring="True" RecurrenceFrequency="{x:Static s:Int32.MaxValue}" FullUpdateFrequency="1" Streaming="true" xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib">
              <AdvancedListSupportClass.Parameters>
                <QueryParameter Parameter="TypeProjectionId" Value="$MPElement[Name='System.WorkItem.Incident.View.ProjectionType']$" />
              </AdvancedListSupportClass.Parameters>
            </AdvancedListSupportClass>
          </ItemsSource>
          <Criteria />
        </Data>
        <Presentation>
          <Columns>
            <mux:ColumnCollection xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="http://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:datebinding="clr-namespace:Microsoft.EnterpriseManagement.UI.SdkDataAccess.Common;assembly=Microsoft.EnterpriseManagement.UI.SdkDataAccess">
              <mux:Column Name="id" DisplayMemberBinding="{Binding Path=Id, Mode=OneWay}" Width="150" DisplayName="Header_Id" Property="Id$ReturnValueAsBigInt$" DataType="s:String" />
              <mux:Column Name="title" DisplayMemberBinding="{Binding Path=Title, Mode=OneWay}" Width="200" DisplayName="Header_Title" Property="Title" DataType="s:String" />
              <mux:Column Name="aDisplayName" DisplayMemberBinding="{Binding Path=AssignedUser.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Assigned_To" Property="AssignedUser.DisplayName" DataType="s:String" />
              <mux:Column Name="sDisplayName" DisplayMemberBinding="{Binding Path=Status.DisplayName, Mode=OneWay}" Width="100" DisplayName="Header_Status" Property="Status.DisplayName" DataType="s:String" />
              <mux:Column Name="priority" DisplayMemberBinding="{Binding Path=Priority, Mode=OneWay}" Width="100" DisplayName="Header_Priority" Property="Priority" DataType="s:Int32" />
              <mux:Column Name="targetResolutionTime" DisplayMemberBinding="{datebinding:DateBinding Path=TargetResolutionTime, Mode=OneWay}" Width="100" DisplayName="Header_Target_Resolution_Time" Property="TargetResolutionTime" DataType="s:DateTime" />
              <mux:Column Name="affectedDisplayName" DisplayMemberBinding="{Binding Path=AffectedUser.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Affected_User" Property="AffectedUser.DisplayName" DataType="s:String" />
              <mux:Column Name="tDisplayName" DisplayMemberBinding="{Binding Path=TierQueue.DisplayName, Mode=OneWay}" Width="150" DisplayName="Header_Support_Group" Property="TierQueue.DisplayName" DataType="s:String" />
              <mux:Column Name="lastModified" DisplayMemberBinding="{Binding Path=$LastModified$, Mode=OneWay}" Width="150" DisplayName="Header_Last_Modified" Property="$LastModified$" DataType="s:DateTime" />
            </mux:ColumnCollection>
          </Columns>
          <ViewStrings>
            <ViewString ID="Header_Id">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Id"]$</ViewString>
            <ViewString ID="Header_Title">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Title"]$</ViewString>
            <ViewString ID="Header_Assigned_To">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Assigned_To"]$</ViewString>
            <ViewString ID="Header_Status">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Status"]$</ViewString>
            <ViewString ID="Header_Priority">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Priority"]$</ViewString>
            <ViewString ID="Header_Target_Resolution_Time">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Target_Resolution_Time"]$</ViewString>
            <ViewString ID="Header_Affected_User">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Affected_User"]$</ViewString>
            <ViewString ID="Header_Support_Group">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Support_Group"]$</ViewString>
            <ViewString ID="Header_Last_Modified">$MPElement[Name="System.WorkItem.Incident.AllIncidents.View.Header_Last_Modified"]$</ViewString>
          </ViewStrings>
        </Presentation>
      </View>

10. Save the Management Pack file.
11. In the Service Manager console, click Administration.
12. In the Administration pane, expand Administration, and then click Management Packs.
13. In the Tasks pane, under Management Packs, click Import.
14. In the Select Management Packs to Import dialog box, select the modified management pack file, and then click Open.
15. In the Import Management Packs dialog box, click Add. 
16. After you have added the management pack, click Import, and then click OK

=====

For the latest version of this article see the link below:

KB2477329 - Improperly configured views in the Service Manager 2010 console generate the error "An error occurred while loading the items"

J.C. Hornbeck | System Center Knowledge Engineer

The App-V Team blog: http://blogs.technet.com/appv/
The WSUS Support Team blog: http://blogs.technet.com/sus/
The SCMDM Support Team blog: http://blogs.technet.com/mdm/
The ConfigMgr Support Team blog: http://blogs.technet.com/configurationmgr/
The SCOM 2007 Support Team blog: http://blogs.technet.com/operationsmgr/
The SCVMM Team blog: http://blogs.technet.com/scvmm/
The MED-V Team blog: http://blogs.technet.com/medv/
The DPM Team blog: http://blogs.technet.com/dpm/
The OOB Support Team blog: http://blogs.technet.com/oob/
The Opalis Team blog: http://blogs.technet.com/opalis

clip_image001 clip_image002


Using the Keyboard to Quickly Fill Out Forms in System Center Service Manager

$
0
0

This video will show you how to use the keyboard to quickly fill out forms without using the mouse.  Service Manager provides a couple of custom form controls designed to make data entry faster and easier: 1) the User Picker control and 2) the List Picker control.  In this video I’ll show you how to select items in those controls faster by using just the keyboard and not using the mouse.  Note: this video is done using the SP1 build of SCSM 2010 which is slightly different (improved).

I recommend watching the video full screen in 720p HD if you can. The image will be much easier to see.

http://www.youtube.com/watch?v=1R7FxV8ZybE

Sending Notifications When a Reviewer Votes on a Review Activity

$
0
0

Let’s say you want to send a notification to a group of users every time a reviewer votes on a review activity.  How would you configure that?  Well – first of all you’ll need to use the NotEqual critera – see this blog post – to trigger the notification when the reviewers Decision property value before the update does not equal the Decision value after the update.  In other words the trigger needs to fire whenever the reviewer votes or changes their vote.  You can only configure this type of subscription criteria by directly editing the XML as outlined in the above blog post.

Once you make that modification in the XML though you can no longer edit the subscription in the console because the UI doesn’t know how to handle that kind of criteria.  You’ll get an error message that looks like this if you try to edit the subscription in the console:

image

Assuming you want to just use the MP XML file I am providing with this blog post to trigger this notification you can just use the criteria XML as is.  It looks like this:

                  <Criteria>
                    <Expression>
                      <SimpleExpression>
                        <ValueExpression>
                          <Property State="Pre">$Context/Property[Type='CustomSystem_WorkItem_Activity_Library!System.Reviewer']/Decision$</Property>
                        </ValueExpression>
                        <Operator>NotEqual</Operator>
                        <ValueExpression>
                          <Property State="Post">$Context/Property[Type='CustomSystem_WorkItem_Activity_Library!System.Reviewer']/Decision$</Property>
                        </ValueExpression>
                      </SimpleExpression>
                    </Expression>
                  </Criteria>

You will want to change the target recipient(s) though.  In the MP XML that I am providing with this blog post the recipient GUID is hard coded to the domain administrator in my dev/demo environment. 

                  <WorkflowArrayParameter Name="PrimaryUserList" Type="string">
                    <Item>eaf7f4e3-fbb2-a7f4-e588-0966e7580da7</Item>
                  </WorkflowArrayParameter>

You’ll want to query your ServiceManager database to the GUID(s) of the users or groups that you want to notify.  You can do that by running a query like this:

 

select basemanagedentityid from MT_System$Domain$User where 
Domain_E36D56F2_AD60_E76E_CD5D_9F7AB51AD395 = 'fabrikam'
and 
UserName_6AF77E23_669B_123F_B392_323C17097BBD = 'administrator'

Just change the domain and  username values to something appropriate for your environment.

You’ll get back a GUID that looks like this:

image

Just replace the GUID in the XML in the MP I am providing in this blog post with the GUID you get back from the user.  You can also add multiple <Item> elements inside of the <WorkflowArrayParameter> element.

Now you can import the MP.

If you want to you can customize the template.

To test, just vote on a review activity.  The specified recipient will see an email similar to this within a few seconds:

image

Management Pack download

System Center Service Manager 2010 SP1 Available for Download Now!

$
0
0

Hello Service Manager fans,

After a very successful launch of System Center Service Manager 2010 last April, Microsoft is pleased to announce the release of Service Pack 1, which is available NOW on Microsoft.com/Downloads.

System Center Service Manager 2010 SP1 addresses critical feedback received from customers and partners and provides greater language support, improved performance capabilities, and a number of usability enhancements.

With Service Pack 1 for System Center Service Manager, language support for the entire product is added for the following languages:

  • Czech
  • Danish
  • Greek
  • Finnish
  • Dutch
  • Norwegian (Bokmål)
  • Polish
  • Portuguese (Portugal)
  • Swedish
  • Turkish (using Latin Collation)

In addition to the additional language support, over 500 improvements were made to address issues and customer change requests.

SP1 also provides official support for SQL Server 2008 R2.

A few other important notes about the bits:

  • SP1 supersedes Cumulative Update #3.  You can install SP1 on top of CU1, CU2, or CU3 or just on top of the original 2010 RTM bits.
  • You can upgrade Retail –> Retail and Select-> Select.  We haven’t tested and therefore don’t officially support upgrading Eval-> Eval but you are welcome to try it.  It will probably work.  Eval –> Retail and Eval –> Select is unfortunately still not supported.
  • Please make sure you read the upgrade documentation on the procedure to upgrade.
  • Don’t forget to also upgrade the Active X control for end users accessing the self-service portal!
  • You can use the bits above to either install a “slipstream” new installation of Service Manager which will install the full product plus SP1 in one installation or you can use them to upgrade from RTM (with or without cumulative updates) to SP1.  The same bits are used for install and upgrade.  They just behave differently depending on what is installed already on the computer.
  • Upgrade your SCSM before you upgrade your Authoring Tool otherwise the Authoring Tool will output MPs which are not importable into SCSM because there will be a version mismatch.
  • There are no new “features” in SP1 – just bug fixes, additional languages, and support for SQL Server 2008 R2.
  • Note: if you don’t see the bits on Microsoft.com/downloads right away give it an hour or two and try again.  The bits are so fresh they are still replicating across all of the downloads servers!
  • The SP1 bits are a “slipstream” build which means you can use them to install a new installation of SCSM (including SP1) or to upgrade an RTM installation to SP1.
  • You can upgrade either the English only or the International RTM bits to SP1.
  • Especially since there are a lot of new languages we are supporting in this release, please be reminded of the need to carefully select your SQL Server collation at the time that you install SQL Server.  This setting cannot be changed after SQL Server is installed so it is important to select the correct collation.  Please see this part of the documentation for more information: http://technet.microsoft.com/en-us/library/gg429478.aspx

System Center Service Manager 2010 SP1 is available through the Microsoft Download Center here:

Eval/Retail bits - http://www.microsoft.com/downloads/details.aspx?FamilyID=5118055b-9cd7-45cd-bae6-7fc287d832d7

Authoring Tool bits - http://www.microsoft.com/downloads/details.aspx?FamilyID=78dcb15b-8744-4a93-b3fa-6a7a40ffeaae

Select Bits – supposedly these will be available for download today on the various Microsoft volume licensing sites.

Details on System Center Service Manager 2010 and the rest of the System Center suite can be found at www.microsoft.com/systemcenter.

Importing Management Packs Programmatically (and How to Connect to a Management Server in an Untrusted Domain)

$
0
0

You can import MPs using the PowerShell cmdlet Import-SCSMManagementPack.  That works for .xml, .mp, or .mpb files.  But what if you wanted to do it programmatically using the SDK?  No problem.  You just need to know how to do it.

Here is some sample code to show you how it’s done.  As a bonus you can see in this code sample how to Connect As some particular account so that you can programmatically connect to SCSM as a different account.  This is good for untrusted domain configurations where you need to connect using an IP address.  Note how you need to import management pack bundles (.mpb) differently than you do a .xml or a .mp file.

                EnterpriseManagementConnectionSettings cs = new EnterpriseManagementConnectionSettings("192.168.1.100");
                cs.Domain = "fabrikam";
                cs.UserName = "administrator";
                char[] charPassword = { 'S', 'M', 'X','#','2','0','0','1' };
                System.Security.SecureString ssPassword = new System.Security.SecureString();
                foreach (char c in charPassword)
                    ssPassword.AppendChar(c);
                cs.Password = ssPassword;

                EnterpriseManagementGroup emg = new EnterpriseManagementGroup(cs);

                //Import XML or .mp:
                ManagementPack managementPack = new ManagementPack("C:\\Temp\\Microsoft.SystemCenter.DataWarehouse.Library.mp");
                emg.ManagementPacks.ImportManagementPack(managementPack);

                //Import MPB:
                ManagementPackBundleReader reader = ManagementPackBundleFactory.CreateBundleReader();
                ManagementPackBundle bundle = reader.Read("MyMP.mpb",emg);
                emg.ManagementPacks.ImportBundle(bundle);

Testing Outbound Email Notifications Using Telnet

$
0
0

Setting up outbound email notifications from SCSM can be a bit tricky and sometimes customers have trouble with it.  In this blog post I’ll show you a way that you can test trying to send an email via the SMTP server.  First – I’ll assume that you have already set up the SMTP notification channel in the Administration\Notifications\Channels view something like this:

image

One thing that people get tripped up on is that they don’t make the return email address the same as the email address of the Workflow Run As Account.  That’s got to be the same or outbound notifications won’t work.  Depending on the Authentication method you have set – Anonymous or Windows Integrated you need to make sure that your SMTP server is configured to allow that.

Here’s how you can test to see if your SMTP server is set up correctly:

0) You’ll need to have Telnet installed on your server to do this.  You can add it via the Features wizard in the Server Management console.

1) Login to the SCSM management server that will be running your workflows (by default this is the first management server you install in a management group).  Login as the Workflow Run As Account!

2) Open a cmd prompt.

3) Enter telnet <the FQDN of your SMTP server> <the port number>

image

4) Enter EHLO <the DNS domain name where the SMTP server is at>

EL

image

If you get a successful connection you will see this:

image

5) Enter MAIL FROM: <the email address of the Workflow Run As Account>

image

6) Enter RCPT TO: <some email address you want to send to>

image

7) Enter DATA

image

8) Enter SUBJECT: <some subject you want to have> and hit Enter TWO times:

image

9) Enter a message body followed by Enter, then a period, then Enter again.

image

10: Enter QUIT

If things go well you’ll receive an email message at the recipient email address you entered above in step #6. 

image

If you get any error messages along the way from the SMTP server, just do a bing search for that error code and you’ll usually find lots of helpful information out there about how to configure your SMTP server correctly for that specific issue.  This approach will help you isolate whether the problem is something inside of Service Manager itself or if the SMTP server connection is not set up correctly due to permissions, network configuration, firewalls, etc.

Viewing all 562 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>