Best of MMS 2010 in Stockholm/Sweden
By · CommentsBest of MMS is approaching! Only a few of weeks away now!
I will deliver a session at Best of MMS 2010 in Stockholm/Sweden. My session “Hardcore customization of Service Manager 2010” is a level 400 session that will take place day one. Amongst other usefull things I’ll show how to make incident management more efficient using custom workflows and how to create automated activities for change management.
There will be a number of System Center experts speaking at the event so bring all your SC questions!
See you in Stockholm! More info about the event here
SCSM Powershell Cmdlets goes Beta 1
By · CommentsThe PowerShell cmdlets for Service Manager has gone Beta 1. I would like to thank Jim Truher for joining the project and putting in a lot of effort in this release!
Release notes:
The snapin has been converted to a PowerShell version 2 module, so registration is not needed. To install extract the zip archive into the
C:\Windows\System32\WindowsPowerShell\v1.0\modules directory
and then run:
PS> Import-Module SMLets
This module now contains the following:
PS> get-command -module smlets |sort commandtype | ft commandtype,name -au CommandType Name ----------- ---- Alias load Alias new-mg Function New-ManagementGroup Function import-Assembly Function Get-SCSMClassProperty Function get-SCSMCommand Function get-SCSMproperty Cmdlet Get-SCSMTask Cmdlet Get-SCSMSubscription Cmdlet Get-SCSMTypeProjection Cmdlet Get-SCSMTaskResult Cmdlet Get-SCSMUserRole Cmdlet Get-SCSMTopLevelEnumeration Cmdlet Import-SCManagementPack Cmdlet Remove-SCSMSubscription Cmdlet Remove-SCSMObject Cmdlet Remove-SCManagementPack Cmdlet Set-SCSMObject Cmdlet Set-SCSMIncident Cmdlet Set-SCSMAnnouncement Cmdlet New-SCSealedManagementPack Cmdlet New-SCManagementPack Cmdlet Set-SCSMObjectProjection Cmdlet New-SCSMObject Cmdlet New-SCSMIncident Cmdlet New-SCSMAnnouncement Cmdlet Get-SCSMRunAsAccount Cmdlet Get-SCDWWarehouseModuleTypes Cmdlet Get-SCDWRelationshipFactTypes Cmdlet Get-SCManagementPack Cmdlet Get-SCSMAnnouncement Cmdlet Get-SCManagementPackElement Cmdlet Get-SCDWOutriggerTypes Cmdlet Get-DataWarehouseConfiguration Cmdlet Export-SCManagementPack Cmdlet Get-SCDWDimensionTypes Cmdlet Get-SCDWMeasureTypes Cmdlet Get-SCDWFactTypes Cmdlet Get-SCSMCategory Cmdlet Get-SCSMRelatedObject Cmdlet Get-SCSMObjectProjection Cmdlet Get-SCSMRelationshipClass Cmdlet Get-SCSMRule Cmdlet Get-SCSMResource Cmdlet Get-SCSMObject Cmdlet Get-SCSMClass Cmdlet Get-SCSMChildEnumeration Cmdlet Get-SCSMConfigItem Cmdlet Get-SCSMIncident Cmdlet Get-SCSMEnumeration |
Grab the release over at codeplex!
http://smlets.codeplex.com
Active Directory Configuration FAQ for ConfigMgr
By · CommentsI often get questions from customers with complex environments regarding how ConfigMgr could be implemented there. Often their Active Directory consist of multiple domains and in some cases even multiple forests. The answers for these questions are in the product documentation but isn’t always easy to find. I am happy to see that Carol Bailey an senior technical writer for Configuration Manager at Microsoft has compiled these question and answers in an FAQ that can be found here.
Custom console tasks: Part 2
By · CommentsIn the first part of the “Custom console tasks” series i described a very simple but powerful way to use the “Tasks” functionality in the Service Manager console to reboot an affected computer of an incident. This time I’m going to show you how we can use PowerShell scripting and some custom Cmdlets I’ve published on Codeplex to create a task that can re-activate (open) a closed incident, something that isn’t possible to do in the console out-of-the-box. Before we go on, please note that according to most process frameworks you shouldn’t re-open a closed incident.
- The first thing you need is the custom Service Manager Cmdlets i published on Codeplex (download here). You can follow the instructions here to install the Cmdlets. Using these cmdlets you’re able to update some incident properties, most importantly for this scenario the “Status” property.
- Secondly you need a powershell script that uses the Cmdlets to do all the magic. I’ve written a script that forces the status of an incident to “Active” (no matter previous Status). Since this is kind of hardcore, and should be considered as an override, I wanted to prompt the user for a “reason”. The script accomplishes this by running some C# code that renders a dialog where the user can provide a reason for running the task on the incident. If the user click the “Cancel” button I abort the action and leave the status “as is”. If the user click the “OK” button I go ahead and change status to “Active” (the reason is logged in the action log).
- Place the script in a local folder, I use “C:\PowerShell Scripts”
- Create a new task in the Service Manager console: Administration – Library – Tasks
- Name: Force Activate
- Description: Used to force status of incident to active, can be used on closed incidents!
- Target Class: Incident
- Category: Incident Management Folder Tasks
- Command Line: powershell.exe
- Parameters: &’.\ForceActivate.ps1′ $Context/Property[Type='WorkItem!System.WorkItem']/Id$
- Working Directory: C:\PowerShell Scripts\
- Log in action log when this task is run: True
- Show output when this task is run: True
param($ID) Add-PSSnapin smcomlets -ErrorAction SilentlyContinue [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Force Incident Status" $objForm.Size = New-Object System.Drawing.Size(400,200) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$x=$objTextBox.Text;$objForm.Close()}}) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(125,120) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Add_Click({$x=$objTextBox.Text;$objForm.Close();$result="OK"}) $objForm.Controls.Add($OKButton) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Size(200,120) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = "Cancel" $CancelButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($CancelButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(360,20) $objLabel.Text = "Please enter a reason for forcing the incident status to Active:" $objForm.Controls.Add($objLabel) $objTextBox = New-Object System.Windows.Forms.TextBox $objTextBox.Location = New-Object System.Drawing.Size(10,40) $objTextBox.Size = New-Object System.Drawing.Size(360,60) $objTextBox.Multiline = "True" $objForm.Controls.Add($objTextBox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() if($result -eq "OK") { Set-SCSMIncident -ID $ID -Status Active Write-Host "Incident status forced to Active" if($x -gt 0) { Write-Host "Reason for action: $x" } else { Write-Host "No reason provided" } } else { Write-Host "Force to active status aborted" } |
You’re done! You’re now able to break all the rules and open closed incidents…
This was an example of how powerful tasks can be built using PowerShell and the Service Manager SDK (used by the Cmdlets) to customize the console functionality in Service Manager. I plan to write a final part of this series where we go all the way and use managed code only to create a custom task including a custom WPF form.
SCSM PowerShell Cmdlets v0.1
By · CommentsInspired by Travis Wright over at the product team’s Service Manager blog, I’ve started a new Codeplex project that will develop a PowerShell snap-in containing useful Service Manager cmdlets. Today I’ve released the first preview version which will give you an idea of what’s to come!
Included is a set of cmdlets which gives you the power to create, update and search for Incidents in Service Manager 2010.
Go to http://smlets.codeplex.com/ and grab the download to start testing this out!
Included cmdlets are:
- Get-SCSMIncident
Ex. get all incidents that includes the word “network” in the title (wildcard by %) and has the status “Active” - Set-SCSMIncident
Ex. update an incident’s description and attach a new file. - New-SCSMIncident
Ex. register a new incident with title, description, impact, urgency, classification and source.
Using these we can now do stuff like closing all incidents which title starts with “Network”, has the status Resolved and hasn’t been touched for a given period of time
Get-SCSMIncident –Title “Network%” –Status Resolved –InactiveFor 5.00:00:00 | Set-SCSMIncident –Status Closed –Comment “Closed due to inactive period”
Don’t miss the solution built using these cmdlets by Anders Bengtsson over at contoso.se, where he solves the intensively discussed problem regarding “update incident by mail”.
ConfigMgr v.Next Beta 1 Released
By · CommentsThe highly anticipated ConfigMgr v.Next Beta 1 was released today and will be available on the connect site very soon. You can sign up for the beta here.
This next release of Configuration Manager is focused on 3 main pillars:
Empower. System Center Configuration Manager helps IT provide a powerful, flexible work experience for people who want to connect from anywhere; on any device they choose—automatically detecting network conditions and device configurations to determine the most appropriate services for each user identity.
- New application management model
- On-demand applications with a self-service software portal
- State-based application delivery to provide people with reliable access
Unify. System Center Configuration Manager reduces IT’s operational costs by simplifying and consolidating the client environment through a lean, unified infrastructure for managing and securing multiple systems and devices per user—including personal devices and PCs.
- Unified management across PCs and devices
- Centralized management of desktop virtualization
Simplify. System Center Configuration Manager reduces complexity and improves visibility into the client environment by providing a single configuration interface for networks and devices, and by automatically detecting vulnerabilities and offering IT-definable remediation of non-compliant systems
- Automated compliance remediation
- Client health and auto remediation
- Streamlined administrative console
Stay tuned by following System Center Nexus Team Blog and of course read our reviews and the highlights here at Litware as soon as we have evaluated Beta 1.
Active Directory connector behavior
By · CommentsThis week my friend Anders Bengtsson and I delivered a Service Manager event together with Microsoft in Sweden. There were a lot of good questions from the audience and a great interest in the product. One of the questions was if the Active Directory synchronize blank attributes from Active Directory if there is a value in the CMDB. Of course we have tried this in a sandbox
1. I created a new user account in Active Directory. I did not change any default values so the Office attribute (PhysicalDeliveryOfficeName) was set to “Not Set”
2. I ran the Active Directory connector synchronization
3. I verified that I had a blank Office attribute in the CMDB
4. I updated the attribute in the CMDB
5. I logged in and out with the account on a workstation
6. I ran the Active Directory connector synchronization
7. The Office attribute in the CMDB is back to blank
If my AD user object is updated, in this case some attributes was updated when the user loged into a workstation, the watermark on the user object is updated, then the whole user will be synchronized back to the CMDB.
Remember this! What you see is not always what you think in Service Manager.
You might think that looking at a computer in the computer form is in fact looking at a single object in the CMDB. This is seldom the truth since most forms in Service Manager targets TypeProjections (which could be seen as a view displaying data from several objects related to each other). As an example you might take a look at the type projection acting as source to the “computer form” in Service Manager. As you can see in the definition below, quite a few different objects support the computer form.
Microsoft.Windows.Computer.ProjectionType :
<TypeProjection Accessibility=”Public”>
<Component
Path=”$Context/Path[Relationship='ConfigurationManager!Microsoft.SystemCente
r.ConfigurationManager.DeployedComputerRunsWindowsComputer'
SeedRole='Target']$” Alias=”PhysicalComputer” /><Component
Path=”$Context/Path[Relationship='Windows!Microsoft.Windows.ComputerHostsOpe
ratingSystem']$” Alias=”OperatingSystem” /><Component
Path=”$Context/Path[Relationship='Windows!Microsoft.Windows.ComputerHostsLog
icalDevice'
TypeConstraint='Peripherals!Microsoft.Windows.Peripheral.NetworkAdapter']$”
Alias=”NetworkAdapter” /><Component
Path=”$Context/Path[Relationship='Windows!Microsoft.Windows.ComputerHostsLog
icalDevice'
TypeConstraint='Peripherals!Microsoft.Windows.Peripheral.Processor']$”
Alias=”Processor” /><Component
Path=”$Context/Path[Relationship='Windows!Microsoft.Windows.ComputerHostsLog
icalDevice'
TypeConstraint='Peripherals!Microsoft.Windows.Peripheral.PhysicalDisk']$”
Alias=”PhysicalDisk” /><Component
Path=”$Context/Path[Relationship='Windows!Microsoft.Windows.ComputerHostsLog
icalDevice'
TypeConstraint='Peripherals!Microsoft.Windows.Peripheral.LogicalDisk']$”
Alias=”LogicalDisk” /><Component
Path=”$Context/Path[Relationship='System!System.ComputerPrimaryUser']$”
Alias=”PrimaryUser” /><Component
Path=”$Context/Path[Relationship='System!System.ConfigItemOwnedByUser']$”
Alias=”Custodian” /><Component
Path=”$Context/Path[Relationship='WorkItem!System.WorkItemRelatesToConfigIte
m' SeedRole='Target']$” Alias=”ImpactedWorkItem” /><Component
Path=”$Context/Path[Relationship='WorkItem!System.WorkItemAboutConfigItem'
SeedRole='Target']$” Alias=”RelatedWorkItem” /><Component
Path=”$Context/Path[Relationship='SupportingItem!System.ConfigItemHasFileAtt
achment']$” Alias=”FileAttachment” /><Component
Path=”$Context/Path[Relationship='System!System.ConfigItemRelatesToConfigIte
m']$” Alias=”RelatedConfigItem” /><Component
Path=”$Context/Path[Relationship='System!System.ConfigItemRelatesToConfigIte
m' SeedRole='Target']$” Alias=”RelatedConfigItemSource” /><Component
Path=”$Context/Path[Relationship='CoreKnowledge!System.EntityLinksToKnowledg
eDocument']$” Alias=”RelatedKnowledgeArticles” /></TypeProjection>
A short summary of this is ”last-write wins” and that you should be very aware that a form can be a mix of the result of a number of connectors and synchronized data.
Custom console tasks: Part 1
By · CommentsIn Service Manager 2010 there is a concept of console tasks. Using tasks you’re able to quickly perform actions while working in the console. An example of this could be launching remote desktop against a computer affected by an incident by just pressing a link within the incident form.
Console tasks are a great feature of Service Manager, but what’s even greater is that you can create your own. There are two different ways to add console tasks, in the console “Library – Tasks” or by defining console tasks in a management pack and importing this. The difference between these two entry points is that you can add much more advanced tasks in the latter one. In this first post of two I’m going to show you how to add a task directly in the console. To show you how to do this – here is how to add a task for rebooting the affected computer of an incident.
- Go to Library – Tasks – New Task
- Name the task “Reboot affected computer”
- Choose the target class Incident
(This associates the task with the incident form and enables us to use properties and related objects properties of the selected incident as arguments for the task command line) - Choose the Incident management Folder Tasks category
(This controls where the task will be available in the console) - Full path to command: shutdown.exe
- On the Parameters section, click insert property and choose: Incident – About Config Item
(“About Config Items” is called “Affected Items” in the form) - Select the property called “NetBIOS Computer Name”
(Locate it faster by using the search functionality) - Working directory: “%windir%\system32”
- Check: Log in action log when this task is run
- Check: Show output when this task is run
Note: You cannot use the option to “log in action log when this task is run”, without using the “show output when this task is run”. Doing so will cause the action to not get registered in the action log. This is a reported bug (not confirmed)!
Now you’ve created a task that can be used from the Incident Management part of the console to reboot an affected computer of an incident.
Some important things to remember here:
- If the list of “Affected Items” (About Config Item) only contains one computer the task will be executed without prompting the user. In this case this would mean that, clicking the reboot task would instantly reboot the affected computer without asking questions like “Are you sure….?”. In the case of the list containing more than one computer, the user will get prompted to select which of the listed computer to reboot.
- The file specified in the command, in this case shutdown.exe, needs to be available on each machine where the console will be used to launch the task (in this specific case this shouldn’t be a problem since shutdown.exe is distributed with the OS).
- When executing a console task, the task will be executed in the context of the logged on user. You can still use roles in Service Manager to show/hide console tasks from different users, but remember that seeing a console task doesn’t automatically give a user the permission to execute the task successfully.
Related information: http://blogs.technet.com/servicemanager/archive/2010/02/11/tasks-part-1-tasks-overview.aspx
In the next part of “Custom console tasks” series I’ll show how to add more advanced console tasks using the SDK (some coding coming up!) and a custom management pack.
Incident SLA Management in Service Manager
By · CommentsA couple of days ago there was a blog post published on the official Service Manager blog that solves a really annoying problem. The problem was that it wasn’t possible to, out-of-the-box, run incident workflows based on SLA breaches in Service Manager. Using the blogged solution you are now able to do exactly that! This means that you are now able to do notification and apply templates on incidents about to or breaching their SLA. By applying templates you could for instance escalate an incident about to breach its SLA. Isn’t that sweet?!
The posted solution is a joint project that Travis Wright and I have been working on for a couple of weeks. I hope you like it!
http://blogs.technet.com/servicemanager/archive/2010/05/06/incident-sla-management-in-service-manager.aspx
