ConfigMgr 2012 comes with a lot of build-in reports, but often it just does not contain all the information I want. Creating a custom report takes more time than just writing a script.
The Get-CMInstalledSoftware script retrieves all computers that have the specified software installed. Like it? Get your copy of the script from here
<# .Synopsis Get all computers that have the specified software installed .DESCRIPTION Get-CMInstalledSoftware retrieves all computers where the specified software is installed on. The function queries SMS_G_System_INSTALLED_SOFTWARE which contains both 32 and 64 bit software installations. The following information is collected Computername,OperatingSystemNameandVersion InstallDate, InstalledLocation, Productname, ProductVersion Publisher, UninstallString .EXAMPLE Get-CMInstalledSoftware -ProductName "Client Center for Configuration Manager%" Computername : Client01 OperatingSystemNameandVersion : Microsoft Windows NT Workstation 6.1 Productname : Client Center for Configuration Manager 2012 ProductVersion : 1.0.1.0 Publisher : Zander Tools InstallDate : Friday, 1. August 2014 00:00:00 InstalledLocation : C:\Program Files\Client Center for Configuration Manager 2012\ UninstallString : MsiExec.exe /X{B299EE26-A664-42A2-8D4E-6BF005EB5E75} .PARAMETER -ProductName The Name of the Software. Use % before or after the productname as a wildcard. #> Function Get-CMInstalledSoftware { [CmdletBinding()] [OutputType([int])] Param ( # Software Product Name [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $ProductName, [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$true, Position=1)] $SiteCode = "SR1", [Parameter(Mandatory=$false, ValueFromPipelineByPropertyName=$true, Position=2)] $SiteServer = "chrv0300.corp.gwpnet.com" ) Begin { [string] $Namespace = "root\SMS\site_$SiteCode" } Process { $arsw = Get-WmiObject -Namespace $Namespace -ComputerName $SiteServer -Query "SELECT * FROM SMS_G_System_INSTALLED_SOFTWARE where ProductName like '$ProductName'" # and ProductVersion = '11.0.61030.0'" $clientswithsw = @() ForEach ($res in $arsw) { $CMResource = (Get-WmiObject -Namespace $Namespace -ComputerName $SiteServer -Query "SELECT Name, ResourceID,Active, SMSUniqueIdentifier,OperatingSystemNameandVersion FROM SMS_R_SYSTEM WHERE ResourceID = '$($res.ResourceID)'") $object = New-Object -TypeName PSObject $object | Add-Member -MemberType NoteProperty -Name "Computername" -Value $cmresource.Name $object | Add-Member -MemberType NoteProperty -Name "OperatingSystemNameandVersion" -Value $cmresource.OperatingSystemNameandVersion $object | Add-Member -MemberType NoteProperty -Name "Productname" -Value $res.ProductName $object | Add-Member -MemberType NoteProperty -Name "ProductVersion" -Value $res.ProductVersion $object | Add-Member -MemberType NoteProperty -Name "Publisher" -Value $res.Publisher $object | Add-Member -MemberType NoteProperty -Name "InstallDate" -Value ([Management.ManagementDateTimeConverter]::ToDateTime($res.InstallDate).DateTime) $object | Add-Member -MemberType NoteProperty -Name "InstalledLocation" -Value $res.InstalledLocation $object | Add-Member -MemberType NoteProperty -Name "UninstallString" -Value $res.UninstallString $clientswithsw += $object } } End { $clientswithsw } }
Have a good day