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"
}
