Manufacturer / Model Collections
You have probably created one or two collections that points to a specific Manufacturer and/or Model.
Well, this script will look in to your SCCM-database and create that kind of collections for you.
First you need my SCCM Module for PowerShell
Then I created a collection named “000 – Manufacturer – Model”
Copy and paste the code below to a file, save it as CreateMM-collections.ps1
Run with at least one param, -rootCollectionName
Example: .\CreateMM-collections.ps1 -rootCollectionName “000 – Manufacturer – Model”
The script support the -WhatIf and -Verbose parameters… might be good to have when testing.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Rikard Ronnkvist / snowland.se # Usage: # Download and install https://snowland.se/sccm-posh/ # Save the file as CreateMM-collections.ps1 # PS:>.\CreateMM-collections.ps1 -rootCollectionName "Name Of Some Collection" # # 2010-03-23 Rikard Ronnkvist First snowland.se release # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PARAM ( [string] $rootCollectionName = $(throw "rootCollectionName required."), [string] $hostName = (Get-Content env:computername), [switch] $Verbose, [Switch] $WhatIf ) if ($verbose.IsPresent) { $VerbosePreference = 'Continue' } Else { $VerbosePreference = 'SilentlyContinue' } Import-Module SCCM\SCCM-Functions -Force Write-Verbose "Connect to SCCM-server $($hostName)" $sccm = Connect-SCCMServer -HostName $hostName Write-Host "Get root collection: ""$($rootCollectionName)""" $rootCollection = Get-SCCMCollection -filter "Name='$($rootCollectionName)'" -sccmserver $sccm if (!$rootCollection) { throw "Cant find ""$($rootCollectionName)""" } Write-Host "Found collection: $($rootCollection.CollectionID)" Write-Host "Lookup Manufacturer and Model" $ManufacturerModel = Get-wmiobject -query "SELECT DISTINCT Manufacturer, Model FROM SMS_G_System_COMPUTER_SYSTEM" -computername $Sccm.Machine -namespace $Sccm.Namespace | Sort-Object Manufacturer, Model $ManufacturerModel | ForEach-Object { $mmCollectionName = "$($_.Manufacturer) - $($_.Model)" Write-Host "Checking ""$($mmCollectionName)""" -ForegroundColor Cyan $mmCollection = Get-SCCMCollection -filter "Name='$($mmCollectionName)'" -sccmserver $sccm if (!$mmCollection) { if (!$WhatIf.IsPresent) { Write-Host "Creating collection: ""$($mmCollectionName)""" $newMmCollection = New-SCCMCollection -name "$($mmCollectionName)" -SccmServer $sccm -parentCollectionID $rootCollection.CollectionID -refreshDays 1 } else { Write-Host "What if: Creating collection: ""$($mmCollectionName)""" -ForegroundColor Red } $wql = "SELECT * FROM SMS_R_System inner join SMS_G_System_COMPUTER_SYSTEM on SMS_G_System_COMPUTER_SYSTEM.ResourceId = SMS_R_System.ResourceId where SMS_G_System_COMPUTER_SYSTEM.Manufacturer = '$($_.Manufacturer)' AND SMS_G_System_COMPUTER_SYSTEM.Model = '$($_.Model)'" if (!$WhatIf.IsPresent) { Write-Verbose "Adding rule with WQL: $wql" Add-SCCMCollectionRule -queryExpression $wql -Server $sccm -collectionID $newMmCollection.CollectionId -queryRuleName $mmCollectionName } else { Write-Host "What if: Adding collection rule to new collection with wql: $($wql)" -ForegroundColor Red } } else { Write-Host "Found collection" } }
2010-03-26 13:07
[...] last post made a flat structure of collections with “Manufacturer – Model”, in this post [...]
2010-07-19 11:10
This is great, how can it be altered to create collections based on IP subnets