PSCCMClient icon indicating copy to clipboard operation
PSCCMClient copied to clipboard

Fix Invoke-CCMSoftwareUpdate returning false status for successful invocations

Open Copilot opened this issue 4 months ago • 1 comments

The Invoke-CCMSoftwareUpdate function was incorrectly returning Invoked = False even when software update installations were successfully triggered. This issue occurred because the function used if ($Invocation) to determine success, which doesn't properly handle CIM method return values.

Root Cause

The function was checking if the invocation result was truthy rather than examining the actual CIM method return code. This caused problems in several scenarios:

  1. Remote execution: When using Invoke-CCMCommand for remote computers, the function may return empty results even when the underlying CIM method succeeded
  2. CIM method failures: Failed CIM calls (ReturnValue ≠ 0) could still return truthy objects, causing false positives

Solution

Updated the success detection logic to match the proven pattern used in Invoke-CCMApplication:

# Before (incorrect)
if ($Invocation) {
    $Result['Invoked'] = $true
}

# After (correct) 
switch ($Invocation.ReturnValue) {
    0 {
        $Result['Invoked'] = $true
    }
}

This change ensures that:

  • Only CIM methods that return ReturnValue = 0 (success) are considered successful
  • Remote execution edge cases are handled gracefully
  • Failed method calls are properly detected regardless of the returned object structure
  • Behavior is consistent with other functions in the module

Testing

The fix has been validated against multiple scenarios including successful invocations, actual failures, null results, and remote execution edge cases.

Fixes #54.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot avatar Aug 28 '25 13:08 Copilot