CSV update of Business Services

September 3, 2013 Posted by Alexander Axberg

In this post I will show how to make a bulk update of Service Owner and Serviced By User relations on specific Business Services.
Since these relations are located on the System.Service class, which is abstract, we can’t use a regular CSV import in Service Manager.

However, we can solve it with some Powershell magic and SMLets.

You need to start with installing SMLets and load it in a powershell console (http://smlets.codeplex.com/‎)

Then you need to prepare your import data. It should be saved as a CSV-file with semicolon separation, and contain the following columns:

  • Displayname of the Business Service ; sAMAccountName of the Service Owner ; sAMAccountName of the Serviced By User

Here is one example of two rows:

Active Directory;user123;user456
Exchange;user123;user456

 

  1. Name the CSV-file “input.csv” and put it in your c:\temp directory
  2. Copy the powershellscript to the same directory
  3. Run the script. The script will search for the displayname, and then update the relations for each row.
  4. All updated services will be logged to the file “updated.txt”
  5. If some service coudn’t be found and updated, they will be logged to “failed.txt”

 

Powershell script:

$input = Get-Content C:\temp\input.txt
$row = $null
$ServiceOwner_RelClass = Get-SCSMRelationshipClass System.ConfigItemOwnedByUser$
$ServiceResp_RelClass = Get-SCSMRelationshipClass System.ConfigItemServicedByUser$

Foreach ($row in $input)
{
$data = $null
$service_displayname = $null
$owner_user = $null
$resp_user = $null

$data = $row.Split(";")
$service_displayname = $data[0]
$owner_user = $data[1]
$resp_user = $data[2]

$service = $null
$row2 = $null
$ServiceOwner = $null
$ServiceResp = $null

#Check array for all columns
If ($data.Length -eq 3)
{
$service = get-scsmobject (get-scsmclass System.Service$) -Filter "Displayname -eq '$service_displayname'"

#Service not found?
If ($service -eq $null)
{
Write-Host "$service_displayname not found!" -ForegroundColor Red
$service_displayname | Out-File c:\temp\failed.txt -Append}

#Service found!
Else
{
$service_displayname + " = " + $service.Displayname
$Service.Displayname | out-file c:\temp\updated.txt -Append
$ServiceOwner = Get-SCSMObject -Class (Get-SCSMClass Microsoft.AD.User$) -filter "Username -eq '$owner_user'"
$ServiceResp = Get-SCSMObject -Class (Get-SCSMClass Microsoft.AD.User$) -filter "Username -eq '$resp_user'"
New-SCSMRelationshipObject -Relationship $ServiceOwner_RelClass -Source $Service -Target $ServiceOwner -Bulk
New-SCSMRelationshipObject -Relationship $ServiceResp_RelClass -Source $Service -Target $ServiceResp -Bulk
}
}
}

Download

Leave a Reply

Your email address will not be published. Required fields are marked *

*