iSeries Patch Upgrade
I am trying to upgrade iSeries Patch 49800 to 55797. (IBM i Access for Windows 7.1) (64bit computer)
I found that using the Registry Key Exists for the detection rule in Intune won't work due to the fact the uninstall guid would be identical for both patches.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{31E11496-1F84-4DCC-B07A-369B40B8B4A7}
Has anyone been successful with using the 'MSI Product Code Exists' or the 'File Exists' options in Intune to get a 'unique detection rule' that will allow the update to successfully run?
Thank you.
Answers (1)
Why not just use 'Registry key exists' and use the entry from the patch list, HKEY_CLASSES_ROOT\Installer\Patches\[Compressed GUID]\SourceList\Media? The format for the so-called "compression" is pretty bizarre (and pointless, in my view!) but hey ho...
Here's some QAD code:
'strCode = "{24B76264-FE15-4A02-B4FE-E527003E6FB9}"
strMungedCode = "2A2AE8CF3A56E6636A78B53649A308F0"'Call MungeGUID(strCode, strMungedCode)
'WScript.Echo strCode & " munged becomes " & strMungedCodeCall UnMungeGUID(strMungedCode, strCode)
WScript.Echo strMungedCode & " unmunged becomes " & strCode
Sub MungeGUID(ByVal strGUID, ByRef strMungedGUID)
'// This routine munges the GUID into the munged format
'// used by various registry entries for Windows Installer
'// For example: {D650B8A9-C547-42D3-A7DF-0FAD0AC6E9ED}
'// becomes
'// 9A8B056D745C3D247AFDF0DAA06C9EDEDim arrSortOrder
Dim strNewCode
Dim intIndexarrSortOrder = Array(9,8,7,6,5,4,3,2,14,13,12,11,19,18,17,16,22,21,24,23,27,26,29,28,31,30,33,32,35,34,37,36)
'// Generate the munged code
For intIndex = 0 To UBound(arrSortOrder)
strNewCode = strNewCode & Mid(strGUID,arrSortOrder(intIndex),1)
NextstrMungedGUID = strNewCode
End SubSub UnMungeGUID(ByVal strMungedGUID, ByRef strGUID)
'// This routine reconstructs a GUID from the munged format
'// used by various registry entries for Windows Installer
'// For example: 9A8B056D745C3D247AFDF0DAA06C9EDE
'// becomes
'// {D650B8A9-C547-42D3-A7DF-0FAD0AC6E9ED}Dim arrSortOrder
Dim intIndex
Dim strPartTemp
Dim strPart1
Dim strPart2
Dim strPart3
Dim strPart4
Dim strPart5'// Part 1
strPartTemp = Left(strMungedGUID, 8)
strPart1 = StrReverse(strPartTemp)'// Part 2
strPartTemp = Mid(strMungedGUID, 9, 4)
strPart2 = StrReverse(strPartTemp)'// Part 3
strPartTemp = Mid(strMungedGUID, 13, 4)
'// Excuse me! May I borrow these variables for a moment?
strPart3 = Left(strPartTemp, 2)
strPart4 = Right(strPartTemp, 2)
strPart3 = StrReverse(strPart4) & StrReverse(strPart3)'// Now deal with part 4 properly
strPartTemp = Mid(strMungedGUID, 17, 2)
strPart4 = Mid(strMungedGUID, 19, 2)
strPart4 = StrReverse(strPartTemp) & StrReverse(strPart4)strPartTemp = Mid(strMungedGUID, 21, 12)
arrSortOrder = Array(2,1,4,3,6,5,8,7,10,9,12,11)
'// Generate the product code
For intIndex = 0 To UBound(arrSortOrder)
strPart5 = strPart5 & Mid(strPartTemp,arrSortOrder(intIndex),1)
NextstrGUID = ""
strGUID = strGUID & "{"
strGUID = strGUID & strPart1
strGUID = strGUID & "-"
strGUID = strGUID & strPart2
strGUID = strGUID & "-"
strGUID = strGUID & strPart3
strGUID = strGUID & "-"
strGUID = strGUID & strPart4
strGUID = strGUID & "-"
strGUID = strGUID & strPart5
strGUID = strGUID & "}"
End Sub