This script will load the module SccmFunctions from the same directory the script is in. In the Module is the function Get-Sccmcollection defined. This function will return all members from a collection. The script will then loop through the members and print them onthe screen. So save the following code as list-collection.ps1 :
#*************************************************************************** #** Script: List-Collection.ps1 #** Version: 1.0 #** Created: 12/2/2010 10:09AM #** Author: Adriaan Westra #** #** Purpose / Comments: #** List members of a SCCM Collection #** #** #** Changelog : #** 12/2/2010 10:09AM : Initial version #** #*************************************************************************** # Clear the screen Clear-Host # import SccmFunctions so call to Get-SccmCollection function can be made Import-Module .\SccmFunctions.psm1 #$DebugPreference = "Continue" # Display debug information $DebugPreference = "SilentlyContinue" # Do not display debug information $SCCMServer = "asussrv01" # Name of the SCCM Site Server $CollectionName = "All Windows 7 PC" # Name of the collection to list #Loop through the results of the function List-collection to display the member names foreach ($member in Get-SccmCollection -servername $sccmserver -Collection $CollectionName) { $member.name } # End of script. exit 0
And save the following code to the same directory as SccmFunctions.psm1:
#*************************************************************************** #** Function: Get-SccmCollection #** Version: 1.0 #** Created: 01-12-2010 11:44 #** Author: Adriaan Westra #** #** Purpose / Comments: #** #** Get members from a SMS Collection. #** #** Change Log : #** #** 01-12-2010 11:44 : Initial Version #** #** Arguments : #** -serverName : Name of the SCCM Site Server #** -Collection : Name of the collection #** #** #** Returns : #** #** All members of the collection #** #*************************************************************************** Function Get-SccmCollection { [CmdletBinding()] PARAM ( [Parameter(Position=1)] $serverName, [Parameter(Position=2)] $Collection ) Write-Debug "Start Function" Write-Debug $serverName Write-Debug $Collection Write-Debug "Getting provider location for default site on server $serverName" # Get the providerlocation from WMI $providerLocation = get-wmiobject -query ` "select * from SMS_ProviderLocation where ProviderForLocalSite = true" ` -namespace "root\sms" -computername $serverName -errorAction Stop # providerLocation.NamespacePath : \\Servername\root\sms\site_SiteCode Write-Debug "Provider location : $($providerLocation.NamespacePath)" # Sitpath = root\sms\site_SiteCode $SitePath = $providerLocation.NamespacePath.split( "\\",4)[3] # Get the collection from WMI $SmsCollection = Get-WmiObject -ComputerName $serverName -Namespace $SitePath ` -Query "Select * From SMS_Collection Where Name='$($Collection)'" $SmsCollection.Get() Write-Debug "Collection ID : $($SmsCollection.CollectionId)" # return the Members from the collection. return Get-WmiObject -ComputerName $serverName -Namespace $SitePath -Query ` "SELECT * FROM SMS_FullCollectionMembership " + ` "WHERE CollectionID='$($SmsCollection.CollectionId)' order by name" Write-Debug "End Function" }