public/Get-SCCMApplicationStatus.ps1
function Get-SCCMApplicationStatus { Param ( [Parameter(Mandatory=$true, Position=0)] $ComputerName, [string] $SearchString, [Switch] $Watch, [System.Management.Automation.PSCredential] $Credential ) $scriptblock = { $OS = (Get-CimInstance win32_operatingsystem).Caption $lastbootup = (Get-CimInstance -ClassName win32_OperatingSystem).lastbootuptime $applications = Get-CimInstance -Namespace "Root\ccm\ClientSDK" -Query "SELECT * FROM CCM_application" -ErrorAction Stop $finaltable = @() foreach($application in $applications) { switch($application.EnforcePreference) { 0{$EnforcePreferenceProp="Immediate"} 1{$EnforcePreferenceProp="NonBusinessHours"} 2{$EnforcePreferenceProp="AdminSchedule"} default{$EnforcePreferenceProp="Unknown"} } switch ($application.EvaluationState){ 0 {$eval = "No state information is available."} 1 {$eval = "Application is enforced to desired/resolved state."} 2 {$eval = "Application is not required on the client."} 3 {$eval = "Application is available for enforcement (install or uninstall based on resolved state). Content may/may not have been downloaded."} 4 {$eval = "Application last failed to enforce (install/uninstall)."} 5 {$eval = "Application is currently waiting for content download to complete."} 6 {$eval = "Application is currently waiting for content download to complete."} 7 {$eval = "Application is currently waiting for its dependencies to download."} 8 {$eval = "Application is currently waiting for a service (maintenance) window."} 9 {$eval = "Application is currently waiting for a previously pending reboot."} 10 {$eval = "Application is currently waiting for serialized enforcement."} 11 {$eval = "Application is currently enforcing dependencies."} 12 {$eval = "Application is currently enforcing."} 13 {$eval = "Application install/uninstall enforced and soft reboot is pending."} 14 {$eval = "Application installed/uninstalled and hard reboot is pending."} 15 {$eval = "Update is available but pending installation."} 16 {$eval = "Application failed to evaluate."} 17 {$eval = "Application is currently waiting for an active user session to enforce."} 18 {$eval = "Application is currently waiting for all users to logoff."} 19 {$eval = "Application is currently waiting for a user logon."} 20 {$eval = "Application in progress, waiting for retry."} 21 {$eval = "Application is waiting for presentation mode to be switched off."} 22 {$eval = "Application is pre-downloading content (downloading outside of install job)."} 23 {$eval = "Application is pre-downloading dependent content (downloading outside of install job)."} 24 {$eval = "Application download failed (downloading during install job)."} 25 {$eval = "Application pre-downloading failed (downloading outside of install job)."} 26 {$eval = "Download success (downloading during install job)."} 27 {$eval = "Post-enforce evaluation."} 28 {$eval = "Waiting for network connectivity."} } $props = [PSCustomObject]@{ ComputerName = $env:ComputerName; Name = $application.Name; InstallState = $application.InstallState; ResolvedState = $application.ResolvedState; EvaluationState = $eval; Enforcement = $EnforcePreferenceProp PercentComplete = $application.PercentComplete; ErrorCode = $application.ErrorCode; ApplicabilityState = $application.ApplicabilityState; LastEvalTime = $application.LastEvalTime; LastInstallTime = $application.LastInstallTime; LastReboot = $lastbootup OS = $os; Id = $application.Id; } $finaltable += $props } if ($using:searchstring){ $finaltable = $finaltable |Where-Object {$_.Name -like $using:searchstring} } if (!$finaltable){ $finaltable = [PSCustomObject]@{ ComputerName = "$env:ComputerName;" Name = "-" InstallState = "-" ResolvedState = "-" EvaluationState = "-" PercentComplete = "-" ErrorCode = "-" ApplicabilityState = "-" LastEvalTime = "-" LastInstallTime = "-" LastReboot = $lastbootup OS = $os; Id = "-" } } return $finaltable }# end script block #Execute Scriptblock on Computername(s) with set parameters. $params = @{ ScriptBlock = $scriptblock } if ($ComputerName){ $params['ComputerName'] = $ComputerName } if ($Credential){ $params['Credential'] = $Credential } if ($Watch){ while(1){ $date = Get-Date -format "dddd MM/dd/yyyy HH:mm" Invoke-Command @params | Sort-Object Installstate | Out-GridView -Title "$date - Close Grid View to Refresh" -PassThru }#end while } else { Invoke-Command @params } } |