fusioninventory / fusioninventory-for-glpi

FusionInventory plugin for GLPI
http://www.FusionInventory.org/
GNU Affero General Public License v3.0
362 stars 150 forks source link

Install Agent Windows FusionInventory - Version 2.4 #2496

Open leandrotenorio opened 6 years ago

leandrotenorio commented 6 years ago

There are many scripts in the internet about create GPO for install of the fusioninventory, on this, I adapted the code with version 2.4 and the install in my server, but, this isn´t working, but, with version 2.2.7.3, it is working normally.

Option Explicit Dim versionverification, fusionarguments, uninstallocsagent, fusionsetupURL ''''' USER SETTINGS ''''' versionverification = "2.4.0.4" fusionarguments = "/S /server=http://myservicedeskdomain/plugins/fusioninventory/ /rpc-trust-localhost /runnow" ' Depending on your needs, you can use either HTTP or Windows share 'fusionsetupURL = "\server1\data\fusioninventory-agentwindows-i386" & versionverification & ".exe" fusionsetupURL = "http://mydomain.com.br/fusioninventory-agent_windows-i386_" & versionverification & ".exe"

uninstallocsagent = "yes" ''''' DO NOT EDIT BELOW ''''' Function baseName (strng) Dim regEx, ret Set regEx = New RegExp regEx.Global = true regEx.IgnoreCase = True regEx.Pattern = ".*/\$" baseName = regEx.Replace(strng,"$1") End Function

Function isHttp (strng) Dim regEx, matches Set regEx = New RegExp regEx.Global = true regEx.IgnoreCase = True regEx.Pattern = "^(http(s?)).*" If regEx.Execute(strng).count > 0 Then isHttp = True Else isHttp = False End If Exit Function End Function

' http://www.ericphelps.com/scripting/samples/wget/index.html Function SaveWebBinary(strUrl) 'As Boolean Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 Const ForWriting = 2 Dim web, varByteArray, strData, strBuffer, lngCounter, ado ' On Error Resume Next 'Download the file with any available object Err.Clear Set web = Nothing Set web = CreateObject("WinHttp.WinHttpRequest.5.1") If web Is Nothing Then Set web = CreateObject("WinHttp.WinHttpRequest") If web Is Nothing Then Set web = CreateObject("MSXML2.ServerXMLHTTP") If web Is Nothing Then Set web = CreateObject("Microsoft.XMLHTTP") web.Open "GET", strURL, False web.Send If Err.Number <> 0 Then SaveWebBinary = False Set web = Nothing Exit Function End If If web.Status <> "200" Then SaveWebBinary = False Set web = Nothing Exit Function End If varByteArray = web.ResponseBody Set web = Nothing 'Now save the file with any available method On Error Resume Next Set ado = Nothing Set ado = CreateObject("ADODB.Stream") If ado Is Nothing Then Set fs = CreateObject("Scripting.FileSystemObject") Set ts = fs.OpenTextFile(baseName(strUrl), ForWriting, True) strData = "" strBuffer = "" For lngCounter = 0 to UBound(varByteArray) ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) Next ts.Close Else ado.Type = adTypeBinary ado.Open ado.Write varByteArray ado.SaveToFile CreateObject("WScript.Shell").ExpandEnvironmentStrings("%Temp%") & "\fusioninventory.exe", adSaveCreateOverWrite ado.Close End If SaveWebBinary = True End Function

Function removeOCS() On error resume next

Dim OCS
' Uninstall agent ocs if is installed
' Verification on OS 32 Bits
On error resume next
OCS = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OCS Inventory Agent\UninstallString")
If err.number = 0 then
    WshShell.Run "CMD.EXE /C net stop ""OCS INVENTORY SERVICE""",0,True
    WshShell.Run "CMD.EXE /C """ & OCS & """ /S /NOSPLASH",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles%\OCS Inventory Agent"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%SystemDrive%\ocs-ng"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C sc delete ""OCS INVENTORY""",0,True
End If

' Verification on OS 64 Bits
On error resume next
OCS = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\OCS Inventory Agent\UninstallString")
If err.number = 0 then
    WshShell.Run "CMD.EXE /C net stop ""OCS INVENTORY SERVICE""",0,True
    WshShell.Run "CMD.EXE /C """ & OCS & """ /S /NOSPLASH",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles(x86)%\OCS Inventory Agent"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%SystemDrive%\ocs-ng"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C sc delete ""OCS INVENTORY""",0,True
End If

' Verification Agent V2 on 32Bit
On error resume next
OCS = WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\OCS Inventory NG Agent\UninstallString")
If err.number = 0 then
    WshShell.Run "CMD.EXE /C net stop ""OCS INVENTORY SERVICE""",0,True
    WshShell.Run "CMD.EXE /C taskkill /F /IM ocssystray.exe",0,True
    WshShell.Run "CMD.EXE /C """ & OCS & """ /S /NOSPLASH",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles%\OCS Inventory Agent"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%SystemDrive%\ocs-ng"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C sc delete ""OCS INVENTORY""",0,True
End If

' Verification Agent V2 on 64Bit
On error resume next
OCS = WshShell.RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\OCS Inventory NG Agent\UninstallString")
If err.number = 0 then
    WshShell.Run "CMD.EXE /C net stop ""OCS INVENTORY SERVICE""",0,True
    WshShell.Run "CMD.EXE /C taskkill /F /IM ocssystray.exe",0,True
    WshShell.Run "CMD.EXE /C """ & OCS & """ /S /NOSPLASH",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles%\OCS Inventory Agent"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C rmdir ""%SystemDrive%\ocs-ng"" /S /Q",0,True
    WshShell.Run "CMD.EXE /C sc delete ""OCS INVENTORY""",0,True
End If

End Function

Function needFusionInstall () Dim Fusion ' install fusion if version is different or if not installed needFusionInstall = False On error resume next Fusion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent\DisplayVersion") If err.number = 0 Then ' Verification on OS 32 Bits If Fusion <> versionverification Then needFusionInstall = True Else needFusionInstall = False Return End If Else ' Verification on OS 64 Bits On error resume next Fusion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent\DisplayVersion") If err.number = 0 Then If Fusion <> versionverification Then needFusionInstall = True End if Else needFusionInstall = True End If End If End Function

''' MAIN Dim WshShell Set WshShell = Wscript.CreateObject("Wscript.shell")

If uninstallocsagent = "yes" Then removeOCS() End If

If needFusionInstall() Then If (isHttp(fusionsetupURL)) Then SaveWebBinary(fusionsetupURL) WshShell.Run "CMD.EXE /C %TEMP%\fusioninventory.exe " & fusionarguments,0,True Else WshShell.Run "CMD.EXE /C """ & fusionsetupURL & """ " & fusionarguments,0,True End If End If

ddurieux commented 6 years ago

With the version available on our website (https://raw.github.com/fusioninventory/fusioninventory-agent/2.4.x/contrib/windows/fusioninventory-agent-deployment.vbs), I deploy the version 2.4 without problems...

adrianowengrat commented 5 years ago

Hey, This error is displayed to me:

"Command line error: The value 'http:' is not allowed for /server=option"

My code is the same... just changing the address of the server. Someone can help me?