Task Sequence References – Which Task Sequences Reference a Specific Package

tl;dr: The SCCM Powershell CMDlets are cumbersome and slow. Use WMI instead.

with WMI

$server = "SERVER"

$package_search = read-host "What package are you searching for (ex. 000004E8):"

$arr_references = Get-WmiObject -ComputerName $SERVER-Namespace "root\sms\site_000" -query "select * from sms_tasksequencepackagereference where refpackageid = '$($package_search)'" 

foreach ($ref in $arr_references) {

    Get-WmiObject -ComputerName $SERVER -Namespace "root\sms\site_000" -query "select * from sms_tasksequencepackage where packageid = '$($ref.packageid)'" | select packageid, name

}


with SCCM Cmdlet

# Written by https://garytown.com/finding-task-sequences-referenced-by-applications-or-packages

$Package = Get-CMPackage -Name "WaaS_Scripts" -Fast
$TaskSequences = Get-CMTaskSequence | Where-Object { $_.References -ne $null }

foreach ($TaskSequence in $TaskSequences)
    {
    if ($TaskSequence.References.Package -eq $package.PackageID)
        {Write-Host $TaskSequence.Name}
    }
$Package = Get-CMPackage -ID "00000D22" -Fast
$TaskSequences = Get-CMTaskSequence | Where-Object { $_.References -ne $null }
 
foreach ($TaskSequence in $TaskSequences)
    {
    if ($TaskSequence.References.Package -eq $package.PackageID)
        {Write-Host $TaskSequence.Name}
    }


In comparison to the SCCM Cmdlet based script from GaryTown, the top script – using WMI – performs 6x faster. Using the measure-command function, we are able to measure how long each script takes to execute. Although 10 seconds during this one-time query is relatively small, when applied to larger scripts that use get-cmpackage recursively, the amount of wasted time quickly builds.


WMI vs SCCM Cmdlet

Post navigation