Not got time to write the usual three-page idiosyncratic blurb, here’s a script which will create four different collections for a pre-existing Application and move the collections to specific Folders (As usual the word wrap has probably screwed it up a little so i have attached the script as ps1 as well here):
Function CreateCollection($collName,$limitingColl,$container,$ud_Scope){
$collInstance = ([wmiclass]”\\server\root\sms\site_001:sms_collection”).CreateInstance()
$collInstance.Name = $collName
$collInstance.LimitToCollectionID = $limitingColl
if($ud_Scope -eq “device”){
$collInstance.CollectionType = 2
}elseif($ud_Scope -eq “user”){
$collInstance.CollectionType = 1
}
if(gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_collection | ?{$_.Name -eq $collName}){
“Collection $collName already exists”
}else{
$collInstance.Put()
$collInstance.Get()
$containerItemInstance = ([wmiclass]”\\server\root\sms\site_001:sms_objectcontaineritem”).CreateInstance()
$containerItemInstance.ContainerNodeID = $container
$containerItemInstance.InstanceKey = $collInstance.CollectionID
if($ud_Scope -eq “device”){
$containerItemInstance.ObjectType = 5000
$containerItemInstance.ObjectTypeName = ‘SMS_Collection_Device’
}elseif($ud_Scope -eq “user”){
$containerItemInstance.ObjectType = 5001
$containerItemInstance.ObjectTypeName = ‘SMS_Collection_User’
}
$containerItemInstance.SourceSite = ‘001’
$containerItemInstance.Put()
}
}
$scope = Read-Host -Prompt “Enter Scope ID (DEV,INT,PRD)”
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.Name -eq ‘Software Distribution’} | %{
$parentContainerID = $_.parentContainerNodeID
if(gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.ContainerNodeID -eq $parentContainerID -and $_.Name -eq $scope}){
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.Name -eq ‘Software Distribution’ -and $_.parentContainerNodeID -eq $parentContainerID -and $_.ObjectTypeName -eq “SMS_Collection_Device”} | %{
$parentContainerID = $_.ContainerNodeID
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.Name -eq ‘Software Requests’ -and $_.parentContainerNodeID -eq $parentContainerID -and $_.ObjectTypeName -eq “SMS_Collection_Device”} | %{
$devContainerID = $_.ContainerNodeID
}
}
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.Name -eq ‘Software Distribution’ -and $_.parentContainerNodeID -eq $parentContainerID -and $_.ObjectTypeName -eq “SMS_Collection_User”} | %{
$parentContainerID = $_.ContainerNodeID
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_objectcontainernode | ?{$_.Name -eq ‘Software Requests’ -and $_.parentContainerNodeID -eq $parentContainerID -and $_.ObjectTypeName -eq “SMS_Collection_User”} | %{
$usrContainerID = $_.ContainerNodeID
}
}
}
}
$devLimitingCollID = (gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_collection | ?{$_.Name -eq “Root-$scope”} | Select CollectionID).CollectionID
$usrLimitingCollID = “SMS00002”
gwmi -ComputerName server -Namespace root\sms\site_001 -Class sms_applicationlatest | ?{$_.SecuredScopeNames -contains $scope -and $_.LocalizedDisplayName -eq ‘OracleClient’} | select LocalizedDisplayName | %{
$appName = $_.LocalizedDisplayName
$collectionName = “$appName – Install Device”
CreateCollection $collectionName $devLimitingCollID $devContainerID “device”
$collectionName = “$appName – Uninstall Device”
CreateCollection $collectionName $devLimitingCollID $devContainerID “device”
$collectionName = “$appName – Install User”
CreateCollection $collectionName $usrLimitingCollID $usrContainerID “user”
$collectionName = “$appName – Uninstall User”
CreateCollection $collectionName $usrLimitingCollID $usrContainerID “user”
}