Yesterday I deployed a computer with ConfigMgr and then wondered why it got certain software installed. And so another script was born.
The Get-CMCollectionOfDevice command retrieves all collections where the specified device has a membership
The Script can be downloaded from here
<#
.SYNOPSIS
Get-CMCollectionOfDevice retrieves all collections where the specified device has a membership
.DESCRIPTION
The Get-CMCollectionOfDevice retrieves all collections where the specified device has a membership
.PARAMETER Computer
The name of the computer device
Example: Client01
.PARAMETER SiteCode
The Configuration Manager Site Code
Example: PRI
.PARAMETER SiteServer
The computer name of the Configuration Manager Site Server
Example: Contoso-01
.EXAMPLE
Get-CMCollectionOfDevice -Computer Client01
CollectionID Name Commnent LastRefreshTime
------------ ---- -------- ---------------
SMS00001 All Systems All Systems 14.10.2014 14:25:57
SMSDM003 All Desktop and Server Cli... All Desktop and Server Cli... 14.10.2014 14:30:02
PR100011 ALL Contoso Workstation Lim. Limiting collection used f... 14.10.2014 16:37:53
PR100014 Zurich Location Zuerich 14.10.2014 14:45:53
The above command lists all collections where computer Client01 is a member of. The default
parameter values for SiteCode and SiteServer defined in the script are used.
.EXAMPLE
Get-CMCollectionOfDevice -Computer Client01 -SiteCode PRI -SiteServer Contoso-01
The above command lists all collections where computer Client01 is a member of within the
Configuration Manager site PRI connecting to Site Server Contoso-01
.NOTES
Version 1.0 , Alex Verboon
Credits to Kaido Järvemets and David O'Brien for the code snippets
#>
function Get-CMCollectionOfDevice
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Computername
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[String]$Computer,
# ConfigMgr SiteCode
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$true,
Position=1)]
[String]$SiteCode = "PRI",
# ConfigMgr SiteServer
[Parameter(Mandatory=$false,
ValueFromPipelineByPropertyName=$true,
Position=2)]
[String]$SiteServer = "contoso-01.corp.com"
)
Begin
{
[string] $Namespace = "root\SMS\site_$SiteCode"
}
Process
{
$si=1
Write-Progress -Activity "Retrieving ResourceID for computer $computer" -Status "Retrieving data"
$ResIDQuery = Get-WmiObject -ComputerName $SiteServer -Namespace $Namespace -Class "SMS_R_SYSTEM" -Filter "Name='$Computer'"
If ([string]::IsNullOrEmpty($ResIDQuery))
{
Write-Output "System $Computer does not exist in Site $SiteCode"
}
Else
{
$Collections = (Get-WmiObject -ComputerName $SiteServer -Class sms_fullcollectionmembership -Namespace $Namespace -Filter "ResourceID = '$($ResIDQuery.ResourceId)'")
$colcount = $Collections.Count
$devicecollections = @()
ForEach ($res in $collections)
{
$colid = $res.CollectionID
Write-Progress -Activity "Processing $si / $colcount" -Status "Retrieving Collection data" -PercentComplete (($si / $colcount) * 100)
$collectioninfo = Get-WmiObject -ComputerName $SiteServer -Namespace $Namespace -Class "SMS_Collection" -Filter "CollectionID='$colid'"
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name "CollectionID" -Value $collectioninfo.CollectionID
$object | Add-Member -MemberType NoteProperty -Name "Name" -Value $collectioninfo.Name
$object | Add-Member -MemberType NoteProperty -Name "Commnent" -Value $collectioninfo.Comment
$object | Add-Member -MemberType NoteProperty -Name "LastRefreshTime" -Value ([Management.ManagementDateTimeConverter]::ToDateTime($collectioninfo.LastRefreshTime))
$devicecollections += $object
$si++
}
} # end check system exists
}
End
{
$devicecollections
}
}
Excellent Powershell Script! thanks!
You can right-click on a Device in the console and select properties. Under the Deployments tab you can see everything that is targeted to it.
Just what I needed! I’ve been looking for something like this for years! Thanks!
Really awesome. Thanks a lot Alex
Do you happen to have developed something similar to looking up membership of a single user?
Its 2021 and I just found this from so many years ago. This works beautifully, I wish I had found it earlier.