From 507d6b8d114239fc1d5a0354858a4462b7e5b759 Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Thu, 29 Mar 2018 12:24:51 +0200 Subject: [PATCH 1/5] Fix for Office 2013 and output.txt path Add a similar way to check office 2013 as the one for office 2016, there is no registry key, we must use the OSPP.vbs script to get the key. Fix pah for reading the output.txt as the current one is inconsistent with the way we create it (%USERPROFILE% vs C:\users\%USERNAME%). In a domain if you have the same name for an account in the domain and out of it, this will leads to a wrong path (domain won't be appended in the path) --- agent/msofficekey.vbs | 101 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 98 insertions(+), 3 deletions(-) diff --git a/agent/msofficekey.vbs b/agent/msofficekey.vbs index 9d63e8e..8993dce 100644 --- a/agent/msofficekey.vbs +++ b/agent/msofficekey.vbs @@ -59,6 +59,7 @@ For a = LBound(aOffID, 1) To UBound(aOffID, 1) schKey "SOFTWARE\Microsoft\Office\" & aOffID(a,1) & "\Registration", true Next +getOffice15Infos getOffice16Infos Sub schKey97(regKey) @@ -180,10 +181,102 @@ Sub writeXML(oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote) "" End Sub +Sub getOffice15Infos + Dim WshShell, oExec + Dim mTab + Dim key, value + Dim path + Set WshShell = WScript.CreateObject("WScript.Shell") + Set WshShellObj = WScript.CreateObject("WScript.Shell") + Set WshProcessEnv = WshShellObj.Environment("Process") + + result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + ' Debug : if 32 bits version available ? + ' wscript.echo result + + ' If file not there command throw an error and return is 1 and abover + if result > 0 then + ' Try with the 64 bits version if available + result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + ' Debug : if 64 bits version available ? + ' WScript.Echo result + end If + + ' Result = 0 if successfully executed + if result = 0 Then + Set fso = CreateObject("Scripting.FileSystemObject") + ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read + path = WshProcessEnv("USERPROFILE") & "\output.txt" + Set file = fso.OpenTextFile(path, 1) + 'strData = file.ReadLine + + Do Until file.AtEndOfStream + ' Debug : echo each line + ' WScript.echo file.ReadLine + + str = file.ReadLine + ' Debug : Show string before split + ' WScript.Echo str + + mTab = Split(str, ":") + arrCount = uBound(mTab) + 1 + + If arrCount > 1 then + key = mTab(0) + value = mTab(1) + + Select Case key + Case "PRODUCT ID" + oProdID = mTab(1) + ' Debug : echo office data + ' WScript.echo "oProdId = " & oProdID + Case "SKU ID" + oGUID = mTab(1) + ' Debug : echo office data + ' WScript.echo "oGUID = " & oGUID + Case "LICENSE NAME" + oProd = mTab(1) + ' Debug : echo office data + ' WScript.echo "oProd = " & oProd + Case "LICENSE DESCRIPTION" + oVer = mTab(1) + ' Debug : echo office data + ' WScript.echo "oVer = " & oVer + Case "ERROR DESCRIPTION" + oNote = mTab(1) + ' Debug : echo office data + ' WScript.echo "oNote = " & oNote + Case "Last 5 characters of installed product key" + oKey = "XXXXX-XXXXX-XXXXX-XXXXX-" & mTab(1) + ' Debug : echo office data + ' WScript.echo "oKey = " & oKey + End Select + End If + + Loop + + oInstall = 1 + oBit = 1 + + file.Close + + 'Check if Office is 365 + If InStr(oProd, "O365") > 0 Then + oVer = "365" + oProd = Right(oProd, len(oProd)-11) + If oProd = " Office15O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If + If oProd = " Office15O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If + End if + writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote + End If + +End Sub + Sub getOffice16Infos Dim WshShell, oExec Dim mTab Dim key, value + Dim path Set WshShell = WScript.CreateObject("WScript.Shell") Set WshShellObj = WScript.CreateObject("WScript.Shell") Set WshProcessEnv = WshShellObj.Environment("Process") @@ -198,12 +291,14 @@ Sub getOffice16Infos result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office16\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) ' Debug : if 64 bits version available ? ' WScript.Echo result - end if + end If ' Result = 0 if successfully executed if result = 0 then Set fso = CreateObject("Scripting.FileSystemObject") - Set file = fso.OpenTextFile("C:\Users\" & WshProcessEnv("USERNAME") & "\output.txt", 1) + ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read + path = WshProcessEnv("USERPROFILE") & "\output.txt" + Set file = fso.OpenTextFile(path, 1) 'strData = file.ReadLine Do Until file.AtEndOfStream @@ -217,7 +312,7 @@ Sub getOffice16Infos mTab = Split(str, ":") arrCount = uBound(mTab) + 1 - if arrCount > 1 then + If arrCount > 1 then key = mTab(0) value = mTab(1) From 2373dddfba35143ced7e9c84c3fd7f347ff317ba Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Wed, 11 Apr 2018 10:05:10 +0200 Subject: [PATCH 2/5] Better Implementation for OSPP detection Instead of duplicating the code for each version, we loop on the potential path for OSPP detection. We loop over the OSPP results for potential multi-products installation to send back the correct XML --- .vs/officepack/v15/.suo | Bin 0 -> 15360 bytes agent/msofficekey.vbs | 143 ++++++++-------------------------------- 2 files changed, 28 insertions(+), 115 deletions(-) create mode 100644 .vs/officepack/v15/.suo diff --git a/.vs/officepack/v15/.suo b/.vs/officepack/v15/.suo new file mode 100644 index 0000000000000000000000000000000000000000..d5bd6e438b325c7d4c27c3ec90c6ee55cd4dc234 GIT binary patch literal 15360 zcmeHN%X1?~8E@~BKmuf0mMjngn6NAhj_i@Gmp56nqnGutWJ|K-2Ljd}>t)G$TatIZ zRXOKCapOvIfE!hiqKZo{+@L736e)@$9H^o=@eh#Y_nXnI$FeL-w%M#z`cywnPft&O z{q^H}^z@?-uKxXMN@Oj`G@CD#y;8lR{P%pfKG_PO5^^@&1pN;6*=z*uX{+E0Q z>;LZgt^a}7-#yI3(fUUxfb>~N9YQ@o9Zs9iwfZT5YnK>g{a@U4OG0&HCkmM|u=stv9SMYW8z z6Dp+ryNog~0R8e$qAce&iFTh>z6#sB0juamI|{h33EeYDp(SrPTj}R^2{@ z|FI6fx?OjpUP`*tu6afE0=AIbL<>r2M-E(bD)$4fYSYy}3G!1G+T(uZ_o1wx3m(*q ze;nM|Gj7!rqSthkCc&S4bvjz&Xb$y>o*RQ?1$Cq~8MS^+L*fi_t14&hiT=jn>+9f8 zT~2+)HXMH1{mz5zpSK?^icNT*A#kf68RLX-bg#gW`x^MuFQR_zm%kfj>93Joke(}` zCK8Z2g;76lrfKCn|1tknzT{2neBSNe*#B<%nOyj5EFQZ!e zilk2dPP8F~Hss-rm(U|zbG_Pe3;nPAp#94KJ@BOuPU_@OeW0KP<({ifdzb$=Pci@J z@Sd)Jy7AYv%obX)rRt|%?XjW%uc1Er-Tlgcrw4!Pzasc@U2^@AcQ2y+j0YGO^vj<< z#(($%s8jv}{(I1go2quuN_PJT|8t%HA;`M}u8f0?y7;&`2>mlKf7+|%wm6;gcc1^p zmK^Q}%PHm`bWPS&}U^Ej^o*xPn~^Uq{}`C|MTL_dd|XM_wRY- znDA=!|LIrJw;R;|=iVSgJnkWI4}kGM_XWNRd=2SH1zAZ>Ic?f zdl`+4tMS+_>@j`dBxbsV8E;35Ug8dZyKTL^hr9%GlbD5!=nANj^~c(|W~`1$ygP&c zX>d2=-+>a;u!`z|)8AlZ^oJpkLJf3Vf zn|tGw>>}zuo*^hef;1#Lu(A66Fv+AzIvnG4G%CXM>q=v1jGpy%-98B+ukmMk za@RX$e23}(6EW@&K~oj5&U0$CPG7B#obr=V5aJF_({b1L4Rw#|fshe>d$G4~$Gr!! zxC!4Qn4Uq(jGr3~HlY-s$w*NE8E|1gOTwG{xlsBcqWLX+Gty2g>3kPeo2_xB*xdU% zj`$t$8Xk^`pNzS0OZYvIr@bD##bY)(?Uosn+3c1~vd1i&BuSQBvy#{Ab0S; zDc)QmRh!#)-A;y5weh8DX**S~B}?gaPDzzFlzeg{lPcDeJ2fpUpW2&jY}WSoAIR2e zS+ZJOChPRH!(?%oXH8D4&0+Fboes$&IV7{w`Vixi5IwGeLYZduuCROb1DI}?jX zoe6h#shkJ}+@(m<6^v~9CN`H^fvH4cCceI%uhav@dT1?EimzAJ6R!KAnThPYV{B3`-d?cREn7inbA6)~sb_=BEk}6vek2-cWqtWdbzU1|< z?ZrYtr^lTOtdt$iVt6-OU!6*2D%NJk@4LUS>$eo+v8XQ|QS1TxW@CFhuu!Zj-nAwF zLb%>s%&(=KxrIj5Dm$lQQx#>!y_{;%C3Va`WGs z!lqg~1D(chX-za1UCs0dKg59e>6zJhL%}FO)BKY3J$(-EzAW zJSOV~H22{XG_=17Rb!jc4(`|XBJNY)JC*hBzZZJ#@c+8??%&M6{pH+yZ@+i#lIy3x z>DAWJv*GIj{d*Lzqwjy(S;wdS{f~YBaZ#uC(mctN&%Ns_VRZgaJO6ea9l|lx`=!_Q zoX`KMXF2G@_sjqA`M=KdUyOYRI{z{7`9H>WdfaO~*>cMBAL>~$o>}NuevS=eO;QZ8 zu+omy8i?Td6|@Sw-FYr?5?}vI_$IprTg{VE^gc*)r#Sy|5AW&cZ&=4!iE`^SXkEi{ z{&SG?ucPyy2YRaW{MqRI=Y>1}ImWZkF9Xy8{j7iE`A@z4Y5o6E{Gj*X#k~Fx4FJpk literal 0 HcmV?d00001 diff --git a/agent/msofficekey.vbs b/agent/msofficekey.vbs index 8993dce..bfc1d79 100644 --- a/agent/msofficekey.vbs +++ b/agent/msofficekey.vbs @@ -38,6 +38,8 @@ aOffID(4,1) = "15.0" aOffID(5,0) = "2016" aOffID(5,1) = "16.0" +Dim aOSPPVersions + Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet") oCtx.Add "__ProviderArchitecture", 64 @@ -56,12 +58,11 @@ schKey2K "Visio", "SOFTWARE\" & wow & "Microsoft\Visio\6.0\", Array("B66F45DC"), For a = LBound(aOffID, 1) To UBound(aOffID, 1) schKey "SOFTWARE\Wow6432Node\Microsoft\Office\" & aOffID(a,1) & "\Registration", false - schKey "SOFTWARE\Microsoft\Office\" & aOffID(a,1) & "\Registration", true + schKey "SOFTWARE\Microsoft\Office\" & aOffID(a,1) & "\Registration", True + aOSPPVersions = Split(aOffID(a,1), ".") + getOfficeOSPPInfos(aOSPPVersions(0)) Next -getOffice15Infos -getOffice16Infos - Sub schKey97(regKey) oReg.GetStringValue HKEY_LOCAL_MACHINE, regKey & "Office\8.0", "BinDirPath", oDir97 If IsNull(oDir97) Then Exit Sub @@ -181,23 +182,25 @@ Sub writeXML(oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote) "" End Sub -Sub getOffice15Infos +Sub getOfficeOSPPInfos(version) Dim WshShell, oExec Dim mTab Dim key, value Dim path + Dim writeProduct + Set WshShell = WScript.CreateObject("WScript.Shell") Set WshShellObj = WScript.CreateObject("WScript.Shell") Set WshProcessEnv = WshShellObj.Environment("Process") - result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office" & version & "\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) ' Debug : if 32 bits version available ? ' wscript.echo result ' If file not there command throw an error and return is 1 and abover if result > 0 then ' Try with the 64 bits version if available - result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office" & version & "\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) ' Debug : if 64 bits version available ? ' WScript.Echo result end If @@ -207,100 +210,10 @@ Sub getOffice15Infos Set fso = CreateObject("Scripting.FileSystemObject") ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read path = WshProcessEnv("USERPROFILE") & "\output.txt" - Set file = fso.OpenTextFile(path, 1) - 'strData = file.ReadLine - - Do Until file.AtEndOfStream - ' Debug : echo each line - ' WScript.echo file.ReadLine - - str = file.ReadLine - ' Debug : Show string before split - ' WScript.Echo str - - mTab = Split(str, ":") - arrCount = uBound(mTab) + 1 - - If arrCount > 1 then - key = mTab(0) - value = mTab(1) - - Select Case key - Case "PRODUCT ID" - oProdID = mTab(1) - ' Debug : echo office data - ' WScript.echo "oProdId = " & oProdID - Case "SKU ID" - oGUID = mTab(1) - ' Debug : echo office data - ' WScript.echo "oGUID = " & oGUID - Case "LICENSE NAME" - oProd = mTab(1) - ' Debug : echo office data - ' WScript.echo "oProd = " & oProd - Case "LICENSE DESCRIPTION" - oVer = mTab(1) - ' Debug : echo office data - ' WScript.echo "oVer = " & oVer - Case "ERROR DESCRIPTION" - oNote = mTab(1) - ' Debug : echo office data - ' WScript.echo "oNote = " & oNote - Case "Last 5 characters of installed product key" - oKey = "XXXXX-XXXXX-XXXXX-XXXXX-" & mTab(1) - ' Debug : echo office data - ' WScript.echo "oKey = " & oKey - End Select - End If - - Loop - - oInstall = 1 - oBit = 1 - - file.Close - - 'Check if Office is 365 - If InStr(oProd, "O365") > 0 Then - oVer = "365" - oProd = Right(oProd, len(oProd)-11) - If oProd = " Office15O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If - If oProd = " Office15O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If - End if - writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote - End If - -End Sub - -Sub getOffice16Infos - Dim WshShell, oExec - Dim mTab - Dim key, value - Dim path - Set WshShell = WScript.CreateObject("WScript.Shell") - Set WshShellObj = WScript.CreateObject("WScript.Shell") - Set WshProcessEnv = WshShellObj.Environment("Process") - result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) - ' Debug : if 32 bits version available ? - ' wscript.echo result - - ' If file not there command throw an error and return is 1 and abover - if result > 0 then - ' Try with the 64 bits version if available - result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office16\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) - ' Debug : if 64 bits version available ? - ' WScript.Echo result - end If - - ' Result = 0 if successfully executed - if result = 0 then - Set fso = CreateObject("Scripting.FileSystemObject") - ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read - path = WshProcessEnv("USERPROFILE") & "\output.txt" Set file = fso.OpenTextFile(path, 1) 'strData = file.ReadLine - + writeProduct = 0 Do Until file.AtEndOfStream ' Debug : echo each line ' WScript.echo file.ReadLine @@ -318,6 +231,7 @@ Sub getOffice16Infos Select Case key Case "PRODUCT ID" + writeProduct = 1 oProdID = mTab(1) ' Debug : echo office data ' WScript.echo "oProdId = " & oProdID @@ -341,26 +255,25 @@ Sub getOffice16Infos oKey = "XXXXX-XXXXX-XXXXX-XXXXX-" & mTab(1) ' Debug : echo office data ' WScript.echo "oKey = " & oKey - End Select + End Select + Else + If writeProduct = 1 Then + oInstall = 1 + oBit = 1 + 'Check if Office is 365 + If InStr(oProd, "O365") > 0 Then + oVer = "365" + oProd = Right(oProd, len(oProd)-11) + If oProd = " Office16O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If + If oProd = " Office16O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If + End if + writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote + writeProduct=0 + End If End If - Loop - - oInstall = 1 - oBit = 1 - - file.Close - - 'Check if Office is 365 - If InStr(oProd, "O365") > 0 Then - oVer = "365" - oProd = Right(oProd, len(oProd)-11) - If oProd = " Office16O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If - If oProd = " Office16O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If - End if - writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote + file.Close End If - End Sub Function decodeKey(iValues) From f7ce2a6667491c902c2785374b7d3fac43e8cfb0 Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Wed, 11 Apr 2018 10:05:10 +0200 Subject: [PATCH 3/5] Better Implementation for OSPP detection Instead of duplicating the code for each version, we loop on the potential path for OSPP detection. We loop over the OSPP results for potential multi-products installation to send back the correct XML --- agent/msofficekey.vbs | 143 +++++++++--------------------------------- 1 file changed, 28 insertions(+), 115 deletions(-) diff --git a/agent/msofficekey.vbs b/agent/msofficekey.vbs index 8993dce..bfc1d79 100644 --- a/agent/msofficekey.vbs +++ b/agent/msofficekey.vbs @@ -38,6 +38,8 @@ aOffID(4,1) = "15.0" aOffID(5,0) = "2016" aOffID(5,1) = "16.0" +Dim aOSPPVersions + Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet") oCtx.Add "__ProviderArchitecture", 64 @@ -56,12 +58,11 @@ schKey2K "Visio", "SOFTWARE\" & wow & "Microsoft\Visio\6.0\", Array("B66F45DC"), For a = LBound(aOffID, 1) To UBound(aOffID, 1) schKey "SOFTWARE\Wow6432Node\Microsoft\Office\" & aOffID(a,1) & "\Registration", false - schKey "SOFTWARE\Microsoft\Office\" & aOffID(a,1) & "\Registration", true + schKey "SOFTWARE\Microsoft\Office\" & aOffID(a,1) & "\Registration", True + aOSPPVersions = Split(aOffID(a,1), ".") + getOfficeOSPPInfos(aOSPPVersions(0)) Next -getOffice15Infos -getOffice16Infos - Sub schKey97(regKey) oReg.GetStringValue HKEY_LOCAL_MACHINE, regKey & "Office\8.0", "BinDirPath", oDir97 If IsNull(oDir97) Then Exit Sub @@ -181,23 +182,25 @@ Sub writeXML(oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote) "" End Sub -Sub getOffice15Infos +Sub getOfficeOSPPInfos(version) Dim WshShell, oExec Dim mTab Dim key, value Dim path + Dim writeProduct + Set WshShell = WScript.CreateObject("WScript.Shell") Set WshShellObj = WScript.CreateObject("WScript.Shell") Set WshProcessEnv = WshShellObj.Environment("Process") - result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office" & version & "\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) ' Debug : if 32 bits version available ? ' wscript.echo result ' If file not there command throw an error and return is 1 and abover if result > 0 then ' Try with the 64 bits version if available - result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office15\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) + result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office" & version & "\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) ' Debug : if 64 bits version available ? ' WScript.Echo result end If @@ -207,100 +210,10 @@ Sub getOffice15Infos Set fso = CreateObject("Scripting.FileSystemObject") ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read path = WshProcessEnv("USERPROFILE") & "\output.txt" - Set file = fso.OpenTextFile(path, 1) - 'strData = file.ReadLine - - Do Until file.AtEndOfStream - ' Debug : echo each line - ' WScript.echo file.ReadLine - - str = file.ReadLine - ' Debug : Show string before split - ' WScript.Echo str - - mTab = Split(str, ":") - arrCount = uBound(mTab) + 1 - - If arrCount > 1 then - key = mTab(0) - value = mTab(1) - - Select Case key - Case "PRODUCT ID" - oProdID = mTab(1) - ' Debug : echo office data - ' WScript.echo "oProdId = " & oProdID - Case "SKU ID" - oGUID = mTab(1) - ' Debug : echo office data - ' WScript.echo "oGUID = " & oGUID - Case "LICENSE NAME" - oProd = mTab(1) - ' Debug : echo office data - ' WScript.echo "oProd = " & oProd - Case "LICENSE DESCRIPTION" - oVer = mTab(1) - ' Debug : echo office data - ' WScript.echo "oVer = " & oVer - Case "ERROR DESCRIPTION" - oNote = mTab(1) - ' Debug : echo office data - ' WScript.echo "oNote = " & oNote - Case "Last 5 characters of installed product key" - oKey = "XXXXX-XXXXX-XXXXX-XXXXX-" & mTab(1) - ' Debug : echo office data - ' WScript.echo "oKey = " & oKey - End Select - End If - - Loop - - oInstall = 1 - oBit = 1 - - file.Close - - 'Check if Office is 365 - If InStr(oProd, "O365") > 0 Then - oVer = "365" - oProd = Right(oProd, len(oProd)-11) - If oProd = " Office15O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If - If oProd = " Office15O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If - End if - writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote - End If - -End Sub - -Sub getOffice16Infos - Dim WshShell, oExec - Dim mTab - Dim key, value - Dim path - Set WshShell = WScript.CreateObject("WScript.Shell") - Set WshShellObj = WScript.CreateObject("WScript.Shell") - Set WshProcessEnv = WshShellObj.Environment("Process") - result = WshShell.Run("cmd /c cscript ""C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) - ' Debug : if 32 bits version available ? - ' wscript.echo result - - ' If file not there command throw an error and return is 1 and abover - if result > 0 then - ' Try with the 64 bits version if available - result = WshShell.Run("cmd /c cscript ""C:\Program Files\Microsoft Office\Office16\OSPP.VBS"" /dstatus > %USERPROFILE%\output.txt", 0, true) - ' Debug : if 64 bits version available ? - ' WScript.Echo result - end If - - ' Result = 0 if successfully executed - if result = 0 then - Set fso = CreateObject("Scripting.FileSystemObject") - ' The USERNAME env var doesn't take the domain part into account which leads to a wrong directory which cannot be read - path = WshProcessEnv("USERPROFILE") & "\output.txt" Set file = fso.OpenTextFile(path, 1) 'strData = file.ReadLine - + writeProduct = 0 Do Until file.AtEndOfStream ' Debug : echo each line ' WScript.echo file.ReadLine @@ -318,6 +231,7 @@ Sub getOffice16Infos Select Case key Case "PRODUCT ID" + writeProduct = 1 oProdID = mTab(1) ' Debug : echo office data ' WScript.echo "oProdId = " & oProdID @@ -341,26 +255,25 @@ Sub getOffice16Infos oKey = "XXXXX-XXXXX-XXXXX-XXXXX-" & mTab(1) ' Debug : echo office data ' WScript.echo "oKey = " & oKey - End Select + End Select + Else + If writeProduct = 1 Then + oInstall = 1 + oBit = 1 + 'Check if Office is 365 + If InStr(oProd, "O365") > 0 Then + oVer = "365" + oProd = Right(oProd, len(oProd)-11) + If oProd = " Office16O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If + If oProd = " Office16O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If + End if + writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote + writeProduct=0 + End If End If - Loop - - oInstall = 1 - oBit = 1 - - file.Close - - 'Check if Office is 365 - If InStr(oProd, "O365") > 0 Then - oVer = "365" - oProd = Right(oProd, len(oProd)-11) - If oProd = " Office16O365BusinessR_Subscription edition" Then oProd = "Microsoft Office Business Subscription Edition 365" : End If - If oProd = " Office16O365BusinessR_Grace edition" Then oProd = "Microsoft Office Business Grace Edition 365" : End If - End if - writeXML oVer,oProd,oProdID,oBit,oGUID,oInstall,oKey,oNote + file.Close End If - End Sub Function decodeKey(iValues) From 5fe18ee62fcc388117ea930a6a2f08e00377039e Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Wed, 11 Apr 2018 14:21:10 +0200 Subject: [PATCH 4/5] Remove VS file I messed up with this, removing... --- .vs/officepack/v15/.suo | Bin 15360 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .vs/officepack/v15/.suo diff --git a/.vs/officepack/v15/.suo b/.vs/officepack/v15/.suo deleted file mode 100644 index d5bd6e438b325c7d4c27c3ec90c6ee55cd4dc234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15360 zcmeHN%X1?~8E@~BKmuf0mMjngn6NAhj_i@Gmp56nqnGutWJ|K-2Ljd}>t)G$TatIZ zRXOKCapOvIfE!hiqKZo{+@L736e)@$9H^o=@eh#Y_nXnI$FeL-w%M#z`cywnPft&O z{q^H}^z@?-uKxXMN@Oj`G@CD#y;8lR{P%pfKG_PO5^^@&1pN;6*=z*uX{+E0Q z>;LZgt^a}7-#yI3(fUUxfb>~N9YQ@o9Zs9iwfZT5YnK>g{a@U4OG0&HCkmM|u=stv9SMYW8z z6Dp+ryNog~0R8e$qAce&iFTh>z6#sB0juamI|{h33EeYDp(SrPTj}R^2{@ z|FI6fx?OjpUP`*tu6afE0=AIbL<>r2M-E(bD)$4fYSYy}3G!1G+T(uZ_o1wx3m(*q ze;nM|Gj7!rqSthkCc&S4bvjz&Xb$y>o*RQ?1$Cq~8MS^+L*fi_t14&hiT=jn>+9f8 zT~2+)HXMH1{mz5zpSK?^icNT*A#kf68RLX-bg#gW`x^MuFQR_zm%kfj>93Joke(}` zCK8Z2g;76lrfKCn|1tknzT{2neBSNe*#B<%nOyj5EFQZ!e zilk2dPP8F~Hss-rm(U|zbG_Pe3;nPAp#94KJ@BOuPU_@OeW0KP<({ifdzb$=Pci@J z@Sd)Jy7AYv%obX)rRt|%?XjW%uc1Er-Tlgcrw4!Pzasc@U2^@AcQ2y+j0YGO^vj<< z#(($%s8jv}{(I1go2quuN_PJT|8t%HA;`M}u8f0?y7;&`2>mlKf7+|%wm6;gcc1^p zmK^Q}%PHm`bWPS&}U^Ej^o*xPn~^Uq{}`C|MTL_dd|XM_wRY- znDA=!|LIrJw;R;|=iVSgJnkWI4}kGM_XWNRd=2SH1zAZ>Ic?f zdl`+4tMS+_>@j`dBxbsV8E;35Ug8dZyKTL^hr9%GlbD5!=nANj^~c(|W~`1$ygP&c zX>d2=-+>a;u!`z|)8AlZ^oJpkLJf3Vf zn|tGw>>}zuo*^hef;1#Lu(A66Fv+AzIvnG4G%CXM>q=v1jGpy%-98B+ukmMk za@RX$e23}(6EW@&K~oj5&U0$CPG7B#obr=V5aJF_({b1L4Rw#|fshe>d$G4~$Gr!! zxC!4Qn4Uq(jGr3~HlY-s$w*NE8E|1gOTwG{xlsBcqWLX+Gty2g>3kPeo2_xB*xdU% zj`$t$8Xk^`pNzS0OZYvIr@bD##bY)(?Uosn+3c1~vd1i&BuSQBvy#{Ab0S; zDc)QmRh!#)-A;y5weh8DX**S~B}?gaPDzzFlzeg{lPcDeJ2fpUpW2&jY}WSoAIR2e zS+ZJOChPRH!(?%oXH8D4&0+Fboes$&IV7{w`Vixi5IwGeLYZduuCROb1DI}?jX zoe6h#shkJ}+@(m<6^v~9CN`H^fvH4cCceI%uhav@dT1?EimzAJ6R!KAnThPYV{B3`-d?cREn7inbA6)~sb_=BEk}6vek2-cWqtWdbzU1|< z?ZrYtr^lTOtdt$iVt6-OU!6*2D%NJk@4LUS>$eo+v8XQ|QS1TxW@CFhuu!Zj-nAwF zLb%>s%&(=KxrIj5Dm$lQQx#>!y_{;%C3Va`WGs z!lqg~1D(chX-za1UCs0dKg59e>6zJhL%}FO)BKY3J$(-EzAW zJSOV~H22{XG_=17Rb!jc4(`|XBJNY)JC*hBzZZJ#@c+8??%&M6{pH+yZ@+i#lIy3x z>DAWJv*GIj{d*Lzqwjy(S;wdS{f~YBaZ#uC(mctN&%Ns_VRZgaJO6ea9l|lx`=!_Q zoX`KMXF2G@_sjqA`M=KdUyOYRI{z{7`9H>WdfaO~*>cMBAL>~$o>}NuevS=eO;QZ8 zu+omy8i?Td6|@Sw-FYr?5?}vI_$IprTg{VE^gc*)r#Sy|5AW&cZ&=4!iE`^SXkEi{ z{&SG?ucPyy2YRaW{MqRI=Y>1}ImWZkF9Xy8{j7iE`A@z4Y5o6E{Gj*X#k~Fx4FJpk From 0e0b07fac670769a94f1d076793bc9ae06774cad Mon Sep 17 00:00:00 2001 From: Guillaume Chanaud Date: Mon, 1 Apr 2019 16:13:27 +0200 Subject: [PATCH 5/5] Relying on SKU ID to write output Now relying on SKU ID presence to set the flag to write XML output as i was previously relying only on PRODUCT ID presence which is not available on Office15 (Office 2013) OSPP.vbs (there was no XML output in this case) --- agent/msofficekey.vbs | 1 + 1 file changed, 1 insertion(+) diff --git a/agent/msofficekey.vbs b/agent/msofficekey.vbs index bfc1d79..dfa74c2 100644 --- a/agent/msofficekey.vbs +++ b/agent/msofficekey.vbs @@ -236,6 +236,7 @@ Sub getOfficeOSPPInfos(version) ' Debug : echo office data ' WScript.echo "oProdId = " & oProdID Case "SKU ID" + writeProduct = 1 oGUID = mTab(1) ' Debug : echo office data ' WScript.echo "oGUID = " & oGUID