Friday 2 December 2011

Move all your default collection using script!!!

Thanks to Richard for this excelent script for moving the collection.

Have you always been annoyed by the default collections cluttering up the view in your ConfigMgr console, well there’s a way that you can store them away under a separate collection. I found this blog post (http://verbalprocessor.com/2009/03/20/how-to-move-collections-in-configmgr) a while ago solving the problem. But hey I’m a lazy guy and after all, I’m installing lots of ConfigMgr servers out at customer sites, so automation is the key that drives lazy admins, right? So in this post I will walk you through using a script that can move collections based on either the name or comment of the collection/collections you want to move.

First up, you need to know some stuff from your environment, like the name of your server and site code. Also you need to know the Collection ID where you want to save the collection to. Start out by going to your ConfigMgr console and locate the site code, you will find it here:

 

Then create a new collection and localize the Collection ID, like this: 

 

Next up download the script (from the bottom of this post) and save it to an appropriate location on your site server, in this case I saved it to the location F:\UTV\Scripts. Then edit the section with site server (I run it on the ConfigMgr server so the name is set to ".") and site code plus the Collection ID of your newly created collection in the script. Also, in this case I will move the collection based on the name they have, so in the script I enter “All%”, which basically means all collections that starts with All… something.  
 
Start an elevated CMD prompt and run the script like below: 



Your output should look similar to this:



Finally refresh you console and your should end up like this:



Hope this help, you can also move collection based on comments just edit the beginning of the script something like this (based on the fact that you have collections with comment like Move).  




The script is here:

just rename it after putting it in notepad.

'
' Script created by: Richard Ulfvin
' http://www.filemilk.se/
'
' Disclaimer:
' This script is provided "AS IS" without express
' or implied warranty of any kind.
'
' Version 1.0
'

Option Explicit
Dim sConfigMgrServer : sConfigMgrServer   = "."
Dim sConfigMgrSiteCode : sConfigMgrSiteCode  = "C01"
Dim sCollectionName : sCollectionName    = ""
Dim sCollectionDesc : sCollectionDesc   = ""
Dim sParentCollectionID : sParentCollectionID  = ""
Dim oConfigMgr, sResult

ConnectToConfigMgr oConfigMgr
MoveCollection oConfigMgr, sCollectionName, sCollectionDesc, sParentCollectionID
Function ConnectToConfigMgr (oConfigMgr)
 'Attempts to use the provided information to connect to the ConfigMgr environment.
 Dim oWMILocator

 On Error Resume Next

 Set oWMILocator = CreateObject("WbemScripting.SWbemLocator")
 Set oConfigMgr = oWMILocator.ConnectServer(sConfigMgrServer, "root\sms\site_" & sConfigMgrSiteCode)

 If Err <> 0 Then
  sResult = "Error: " & Err.description
  Wscript.echo sResult
  Err.Clear
  Wscript.Quit(0)
 Else
  sResult = "Successfully connected to ConfigMgr"
  Wscript.echo sResult
 End If

 On Error Goto 0

End Function

Function MoveCollection(oConfigMgr, sCollectionName, sCollectionDesc, sParentCollectionID)
 Dim cCollections, oCollection, oCollectionRelation, sCollectionID, oCollectionLink, cCollectionLinks

 ' Obtain the collection ID of the collection.
 If sCollectionName <> "" Then
  Set cCollections = oConfigMgr.ExecQuery ("SELECT * FROM SMS_Collection where Name LIKE '" & sCollectionName & "'")
  Wscript.echo "Using Collection Name for parameter: " & sCollectionName
 ElseIf sCollectionDesc <> "" Then
  Set cCollections = oConfigMgr.ExecQuery ("SELECT * FROM SMS_Collection where Comment LIKE '" & sCollectionDesc & "'") 
  Wscript.echo "Using Collection Comment for parameter: " & sCollectionDesc 
 End If

 For each oCollection in cCollections
 
  sCollectionID=oCollection.CollectionID
  Wscript.echo "Found collection with name: " & oCollection.Name & " and CollectionID: " & oCollection.CollectionID
 
  ' Attempts to move the collection into the desired parent collection.
  Set oCollectionRelation = oConfigMgr.Get("SMS_CollectToSubCollect").SpawnInstance_()
  oCollectionRelation.parentCollectionID = sParentCollectionID
  oCollectionRelation.subCollectionID = sCollectionID
  oCollectionRelation.Put_
  Wscript.echo "Moving: " & oCollection.Name & " to rootcollectionID: " & sParentCollectionID
 
  'Delete any prior collectionlink.
  Set cCollectionLinks = oConfigMgr.ExecQuery ("SELECT * FROM SMS_CollectToSubCollect WHERE subCollectionID = '" & sCollectionID & "' AND NOT parentCollectionID = '" & sParentCollectionID & "'" ) 
  For each oCollectionLink in cCollectionLinks
   Wscript.echo "Found collection link for ID: " & oCollectionLink.subCollectionID & " with parrent collectionID: " & oCollectionLink.parentCollectionID & " to delete!"
   oCollectionLink.Delete_
  Next
 
 Next

End Function


Cheers!!!!!!

No comments:

Post a Comment