Link to home
Start Free TrialLog in
Avatar of Ryan Smith
Ryan SmithFlag for United States of America

asked on

Editing SCCM Colladd.vbs Script

I've been using the colladd.vbs script to add systems to a collection. Im trying to get around using a text file. Intstead i want to be able to input the systems throught the command line with the rest of the arguments (server name, collection ID). If anyone can help me with this it will be much appreciated. I added the code below

***I want to be able to input the system name instead of using the text file***

Set fso = CreateObject("Scripting.FileSystemObject")					 

Set arrArgs = WScript.Arguments
if (arrArgs.Count = 0) Then								'Display Blurb
	wscript.echo ("Colladd.vbs v1.0")					
	wscript.echo ("03/06/03 Mark Nunn")
	wscript.echo ("http://mark.nunn.net")
	wscript.echo ("Colladd.vbs server filename collectionID - to add from file to collection")
	wscript.echo ("Colladd.vbs server - to list collectionID's")
else

	on error resume next								'Some error handling

	strServer=arrArgs(0)								'set variables from command line

	if (arrArgs.Count = 3) Then
		strFile=arrArgs(1)
		strCollID=arrArgs(2)
	end if
	Set objLocator = CreateObject("WbemScripting.SWbemLocator") 			
	Set objSMS = objLocator.ConnectServer(strServer, "Root/SMS")			'connect to sms
	objSMS.Security_.ImpersonationLevel = 3
	wscript.Echo("Connecting to Root/SMS on " & strServer)			
	
	set colSiteDetails=objSMS.ExecQuery("select Machine, SiteCode from SMS_ProviderLocation where ProviderForLocalSite=True")
	For Each insSiteDetails In colSiteDetails
		strSiteCode=insSiteDetails.SiteCode
	next										
	wscript.Echo("Connecting to Root/SMS/site_" & strSiteCode &" on " & strServer)
	set objSMS=objLocator.ConnectServer(strServer, "root/SMS/site_" + strSiteCode)
	wscript.Echo("Connected") 

	if (arrArgs.Count < 3) Then							'if not all arguments supplied list colelctions
		set colCollections=objSMS.ExecQuery("select CollectionID, Name from SMS_Collection ORDER BY CollectionID")
		wscript.echo("CollectionID" & vbTab & "Name")
		For Each insCollection In colCollections
			wscript.echo(insCollection.CollectionID & VbTab & insCollection.Name)
		Next
	else										'otherwise add from file
		set instColl = objSMS.Get("SMS_Collection.CollectionID="&"""" & strCollID & """")
		if Instcoll.Name="" then						'check valid collection
			wscript.echo (strCollId &" Not Found")
		else
			Set filNames = fso.OpenTextFile(strFile)				'open file of machines
			if  (filNames) then
				While not filNames.AtEndOfStream
					strMachine=filNames.ReadLine				'read each line and find resource ID
					set colNewResources=objSMS.ExecQuery("SELECT ResourceId FROM SMS_R_System WHERE NetbiosName ='" & strMachine & "'")	
					strNewResourceID = 0  				
					For each insNewResource in colNewResources
						strNewResourceID = insNewResource.ResourceID
					Next
					if strNewResourceID <> 0 then				'if one exists crate a collection rule
						Set instDirectRule = objSMS.Get("SMS_CollectionRuleDirect").SpawnInstance_ ()
						instDirectRule.ResourceClassName = "SMS_R_System"	
						instDirectRule.ResourceID = strNewResourceID
						instDirectRule.RuleName = "Findres - Replaces " & strResource
						instColl.AddMembershipRule instDirectRule , SMSContext
						instColl.RequestRefresh False
						wscript.echo(strMachine & " Added to " & Instcoll.Name)
					else
						wscript.echo(strMachine & " Not Found")		'otherwise display error
					end if
				WEnd								'next line
			else
				 wscript.echo ("Can't Open " & strfile)				'if file not found
			end if
		end if
	end if
end if

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Meir Rivkin
Meir Rivkin
Flag of Israel image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Ryan Smith

ASKER

Thanks ill try this when I get home.
Worked Like a charm!! thanks!!!