
I got a task to create a script so other team could use it to retrieve the list of machines from specific collection in SCCM.
<#
.Synopsis
This script query specific sccm collection and list all its members
.DESCRIPTION
This powershell script is designed to get list of all devices from a specific collection in SCCM, and it saves the output to a text file in c:\device.txt
Path:
by default it saves the output to "c:\device.txt". you can change the path to your specific location, just change the $path parameter value
Collection:
The default collection is "workstations"
To use specific Collection, first you need to find the Collection ID from sccm console like "SF1003", then change the value of paramater in script "[string]$SCCMCollectionID = 'SF1003' "
.EXAMPLE
You can run the script first so it could be saved in current session memory, then call the function using dot source as:
. .\Get_Sccm_Collection_members_PS.ps1
Get-CollectionMembership
.EXAMPLE
You can call the script directly
.\Get_Sccm_Collection_members_PS.ps1
.EXAMPLE
To override the default paramters value with different info, use this
.\Get_Sccm_Collection_members_PS.ps1 -siteCode 'sitecode' -siteserver 'servername' -collectionID 'collection id' -path 'c:\device.txt"
.EXAMPLE
To override the default paramters value with different info, use this
. .\Get_Sccm_Collection_members_PS.ps1
Get-CollectionMembership-siteCode 'sitecode' -siteserver 'servername' -collectionID 'collection id' -path 'c:\device.txt"
.NOTES
.LINK
File Name : Get_Sccm_Collection_members_PS.ps1
Author : hashmat mohammadi
Requires : PowerShell V5
#>
function Get-SccmCollectionMembership
{
[CmdletBinding()]
Param
(
#[Parameter(Mandatory)]
[string] $SiteCode = 'SF1',
#[Parameter(Mandatory)]
[string] $SiteServer= 'sccm.hashmat.local',
#[Parameter(Mandatory)]
[string]$SCCMCollectionID = 'SF1003',
#[Parameter][strin
[string]$path = 'c:\device.txt'
)
Begin
{
$CollectionMembers = Get-WmiObject -Namespace "root\SMS\site_$($SiteCode)" -Query "SELECT * FROM SMS_FullCollectionMembership WHERE CollectionID='$($SCCMCollectionID)' order by name" -ComputerName $SiteServer
}
Process
{
$CollectionMembers.name
$CollectionMembers.name | Out-File $path | notepad $path
}
End
{
}
}