You are not logged in.
Pages: 1
I want to install the glpi agent using a script but I only found one for fusioninventory. I tried to modify it but it doesn't work. Can you help me ?
Option Explicit
Dim Repair, Verbose
Dim Setup, SetupArchitecture, SetupLocation, SetupNightlyLocation, SetupOptions, SetupVersion, RunUninstallFusionInventoryAgent
SetupVersion = "1.2"
SetupLocation = "https://github.com/glpi-project/glpi-agent/releases/download/" & SetupVersion
SetupArchitecture = "Auto"
SetupOptions = "/quiet RUNNOW=1 EXECMODE=1 SERVER='https://[myServer]/front/inventory.php' "
Setup = "GLPI-Agent-" & SetupVersion & "-" & SetupArchitecture & ".msi"
Verbose = "yes"
RunUninstallFusionInventoryAgent = "No"
'
'
' DO NOT EDIT BELOW
'
'
Function hasOption(opt)
Dim regEx
Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = False
regEx.Pattern = "\b" & opt & "=.+\b"
hasOption = regEx.Test(SetupOptions)
End Function
Function uninstallFusionInventoryAgent()
Dim Uninstall, getValue
' Try to get SERVER and LOCAL from FIA configuration in registry if needed
If not hasOption("SERVER") then
On error resume next
getValue = WshShell.RegRead("Ordinateur\HKEY_LOCAL_MACHINE\SOFTWARE\GLPI-Agent\server")
If err.number = 0 And getValue <> "" then
SetupOptions = SetupOptions & " SERVER='" & getValue & "'"
End If
End If
If not hasOption("LOCAL") then
On error resume next
getValue = WshShell.RegRead("Ordinateur\HKEY_LOCAL_MACHINE\SOFTWARE\GLPI-Agent\local")
If err.number = 0 And getValue <> "" then
SetupOptions = SetupOptions & " LOCAL='" & getValue & "'"
End If
End If
' Verify normal case
On error resume next
Uninstall = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent\UninstallString")
If err.number = 0 then
WshShell.Run "CMD.EXE /C net stop FusionInventory-Agent",0,True
WshShell.Run "CMD.EXE /C """ & Uninstall & """ /S /NOSPLASH",0,True
WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles%\FusionInventory-Agent"" /S /Q",0,True
End If
' Verify FIA x86 is installed on x64 OS
On error resume next
Uninstall = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent\UninstallString")
If err.number = 0 then
WshShell.Run "CMD.EXE /C net stop FusionInventory-Agent",0,True
WshShell.Run "CMD.EXE /C """ & Uninstall & """ /S /NOSPLASH",0,True
WshShell.Run "CMD.EXE /C rmdir ""%ProgramFiles(x86)%\FusionInventory-Agent"" /S /Q",0,True
End If
End Function
Function AdvanceTime(nMinutes)
Dim nMinimalMinutes, dtmTimeFuture
' As protection
nMinimalMinutes = 5
If nMinutes < nMinimalMinutes Then
nMinutes = nMinimalMinutes
End If
' Add nMinutes to the current time
dtmTimeFuture = DateAdd ("n", nMinutes, Time)
' Format the result value
' The command AT accepts 'HH:MM' values only
AdvanceTime = Hour(dtmTimeFuture) & ":" & Minute(dtmTimeFuture)
End Function
Function baseName (strng)
Dim regEx
Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = True
regEx.Pattern = ".*[/\\]([^/\\]+)$"
baseName = regEx.Replace(strng,"$1")
End Function
Function GetSystemArchitecture()
Dim strSystemArchitecture
Err.Clear
' Get operative system architecture
On Error Resume Next
strSystemArchitecture = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%")
If Err.Number = 0 Then
' Check the operative system architecture
Select Case strSystemArchitecture
Case "x86"
' The system architecture is 32-bit
GetSystemArchitecture = "x86"
Case "AMD64"
' The system architecture is 64-bit
GetSystemArchitecture = "x64"
Case Else
' The system architecture is not supported
GetSystemArchitecture = "NotSupported"
End Select
Else
' It has been not possible to get the system architecture
GetSystemArchitecture = "Unknown"
End If
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
Function isNightly(strng)
Dim regEx, matches
Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = True
regEx.Pattern = "-(git[0-9a-f]{8})$"
If regEx.Execute(strng).count > 0 Then
isNightly = True
Else
isNightly = False
End If
Exit Function
End Function
Function IsInstallationNeeded(strSetupVersion, strSetupArchitecture, strSystemArchitecture)
Dim strCurrentSetupVersion
' Compare the current version, whether it exists, with strSetupVersion
If strSystemArchitecture = "x86" Then
' The system architecture is 32-bit
' Check if the subkey 'SOFTWARE\GLPI-Agent\Installer' exists
On error resume next
strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\GLPI-Agent\Installer\Version")
If Err.Number = 0 Then
' The subkey 'SOFTWARE\GLPI-Agent\Installer' exists
If strCurrentSetupVersion <> strSetupVersion Then
ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
IsInstallationNeeded = True
End If
Exit Function
Else
' The subkey 'SOFTWARE\GLPI-Agent\Installer' doesn't exist
Err.Clear
ShowMessage("Installation needed: " & strSetupVersion)
IsInstallationNeeded = True
End If
Else
' The system architecture is 64-bit
' Check if the subkey 'SOFTWARE\Wow6432Node\GLPI-Agent\Installer' exists
On error resume next
strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GLPI-Agent\Installer\Version")
If Err.Number = 0 Then
' The subkey 'SOFTWARE\Wow6432Node\GLPI-Agent\Installer' exists
If strCurrentSetupVersion <> strSetupVersion Then
ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
IsInstallationNeeded = True
End If
Exit Function
Else
' The subkey 'SOFTWARE\Wow6432Node\GLPI-Agent\Installer' doesn't exist
Err.Clear
' Check if the subkey 'SOFTWARE\GLPI-Agent\Installer' exists
On error resume next
strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\GLPI-Agent\Installer\Version")
If Err.Number = 0 Then
' The subkey 'SOFTWARE\GLPI-Agent\Installer' exists
If strCurrentSetupVersion <> strSetupVersion Then
ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
IsInstallationNeeded = True
End If
Exit Function
Else
' The subkey 'SOFTWARE\GLPI-Agent\Installer' doesn't exist
Err.Clear
ShowMessage("Installation needed: " & strSetupVersion)
IsInstallationNeeded = True
End If
End If
End If
End Function
Function IsSelectedRepair()
If LCase(Repair) <> "no" Then
ShowMessage("Installation repairing: " & SetupVersion)
IsSelectedRepair = True
Else
IsSelectedRepair = False
End If
End Function
' http://www.ericphelps.com/scripting/samples/wget/index.html
Function SaveWebBinary(strSetupLocation, strSetup)
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Const ForWriting = 2
Dim web, varByteArray, strData, strBuffer, lngCounter, ado, strUrl
strUrl = strSetupLocation & "/" & strSetup
'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%") & "\" & strSetup, adSaveCreateOverWrite
ado.Close
End If
SaveWebBinary = True
End Function
Function ShowMessage(strMessage)
If LCase(Verbose) <> "no" Then
WScript.Echo strMessage
End If
End Function
'
'
' MAIN
'
'
Dim nMinutesToAdvance, strCmd, strSystemArchitecture, strTempDir, WshShell, strInstallOrRepair, bInstall
Set WshShell = WScript.CreateObject("WScript.shell")
nMinutesToAdvance = 5
If RunUninstallFusionInventoryAgent = "Yes" Then
uninstallFusionInventoryAgent()
End If
' Get system architecture
strSystemArchitecture = GetSystemArchitecture()
If (strSystemArchitecture <> "x86") And (strSystemArchitecture <> "x64") Then
ShowMessage("The system architecture is unknown or not supported.")
ShowMessage("Deployment aborted!")
WScript.Quit 1
Else
ShowMessage("System architecture detected: " & strSystemArchitecture)
End If
' Check and auto detect SetupArchitecture
Select Case LCase(SetupArchitecture)
Case "x86"
' The setup architecture is 32-bit
SetupArchitecture = "x86"
Setup = Replace(Setup, "x86", SetupArchitecture, 1, 1, vbTextCompare)
ShowMessage("Setup architecture: " & SetupArchitecture)
Case "x64"
' The setup architecture is 64-bit
SetupArchitecture = "x64"
Setup = Replace(Setup, "x64", SetupArchitecture, 1, 1, vbTextCompare)
ShowMessage("Setup architecture: " & SetupArchitecture)
Case "auto"
' Auto detection of SetupArchitecture
SetupArchitecture = strSystemArchitecture
Setup = Replace(Setup, "Auto", SetupArchitecture, 1, 1, vbTextCompare)
ShowMessage("Setup architecture detected: " & SetupArchitecture)
Case Else
' The setup architecture is not supported
ShowMessage("The setup architecture '" & SetupArchitecture & "' is not supported.")
WScript.Quit 2
End Select
' Check the relation between strSystemArchitecture and SetupArchitecture
If (strSystemArchitecture = "x86") And (SetupArchitecture = "x64") Then
' It isn't possible to execute a 64-bit setup on a 32-bit operative system
ShowMessage("It isn't possible to execute a 64-bit setup on a 32-bit operative system.")
ShowMessage("Deployment aborted!")
WScript.Quit 3
End If
bInstall = False
strInstallOrRepair = "/i"
If IsInstallationNeeded(SetupVersion, SetupArchitecture, strSystemArchitecture) Then
bInstall = True
ElseIf IsSelectedRepair() Then
strInstallOrRepair = "/fa"
bInstall = True
End If
If bInstall Then
If isNightly(SetupVersion) Then
SetupLocation = SetupNightlyLocation
End If
If isHttp(SetupLocation) Then
ShowMessage("Downloading: " & SetupLocation & "/" & Setup)
If SaveWebBinary(SetupLocation, Setup) Then
strCmd = WshShell.ExpandEnvironmentStrings("%ComSpec%")
strTempDir = WshShell.ExpandEnvironmentStrings("%TEMP%")
ShowMessage("Running: MsiExec.exe " & strInstallOrRepair & " """ & strTempDir & "\" & Setup & """ " & SetupOptions)
WshShell.Run "MsiExec.exe " & strInstallOrRepair & " """ & strTempDir & "\" & Setup & """ " & SetupOptions, 0, True
ShowMessage("Scheduling: DEL /Q /F """ & strTempDir & "\" & Setup & """")
WshShell.Run "AT.EXE " & AdvanceTime(nMinutesToAdvance) & " " & strCmd & " /C ""DEL /Q /F """"" & strTempDir & "\" & Setup & """""", 0, True
ShowMessage("Deployment done!")
Else
ShowMessage("Error downloading '" & SetupLocation & "\" & Setup & "'!")
End If
Else
ShowMessage("Running: MsiExec.exe " & strInstallOrRepair & " """ & SetupLocation & "\" & Setup & """ " & SetupOptions)
WshShell.Run "MsiExec.exe " & strInstallOrRepair & " """ & SetupLocation & "\" & Setup & """ " & SetupOptions, 0, True
ShowMessage("Deployment done!")
End If
Else
ShowMessage("It isn't needed the installation of '" & Setup & "'.")
End If
Even if I write this in the console it doesn't work :
msiexec /i [path to .msi] /quiet RUNNOW=1 EXECMODE=1 SERVER='https://[myServer]/front/inventory.php
Do you have an idea of the problem please ?
Last edited by Shizrek (2022-05-06 12:36:41)
Offline
Hello,
You can found the vbs script here : h.t.t.p.s://github.com/glpi-project/glpi-agent/blob/1.2/contrib/windows/glpi-agent-deployment.vbs
Don't forget to write h.t.t.p.s without the "."
For me i had to write this for the SERVER address : @IP/glpi/front/inventory.php but it's write : @ip/front/inventory.php in the script, don't know why.. but it work
Last edited by Info-ni (2022-05-06 16:02:22)
Offline
Thanks, it still doesn't work, but knowing the problem is not the script I think I identified the issue. I can't test it before Monday, but I've read that you need the admin rights when you use the "/quiet" in the command line and that I can replace it with "/passive /qn".
Offline
Pages: 1