Micko77666 |
Salut tout le monde,
Je rencontre un soucis avec le déploiement d'un script pour installer FusionInventory, ma GPO s'applique bien et mon script aussi (j'ai mis une ligne qui créé un répertoire pour être sur que le script est bien exécute).
Par contre rien ne se passe, si je mets la création du répertoire à la fin j'ai rien, donc il y a un moment où le script doit bloquer, mais je ne vois vraiment pas où. Surtout que si je le lance à la main, l'installation fonctionne très bien.
Voici le script (j'ai enlevé les commentaires pour faire plus petit) :
Code :
- Option Explicit
- Dim Force, Verbose, Fso
- Dim Setup, SetupArchitecture, SetupLocation, SetupOptions, SetupVersion
- SetupVersion = "2.3.20"
- SetupLocation = "\\serveur\fusioninventory"
- SetupArchitecture = "Auto"
- SetupOptions = "/acceptlicense /runnow /execmode=service /add-firewall-exception /no-ssl-check /server='https://glpi.*******/plugins/fusioninventory/' /S"
- Setup = "fusioninventory-agent_windows-x64_2.3.20.exe"
- Force = "Yes"
- 'Verbose = "Yes"
- 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, ret
- 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 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\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' exists
- ' This subkey is now deprecated
- On error resume next
- strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent\DisplayVersion" )
- If Err.Number = 0 Then
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' exists
- If strCurrentSetupVersion <> strSetupVersion Then
- ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- Exit Function
- Else
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' doesn't exist
- Err.Clear
- ' Check if the subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- On error resume next
- strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent\DisplayVersion" )
- If Err.Number = 0 Then
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- If strCurrentSetupVersion <> strSetupVersion Then
- ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- Exit Function
- Else
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' doesn't exist
- Err.Clear
- ShowMessage("Installation needed: " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- End If
- Else
- ' The system architecture is 64-bit
- ' Check if the subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' exists
- ' This subkey is now deprecated
- On error resume next
- strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent\DisplayVersion" )
- If Err.Number = 0 Then
- ' The subkey 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' exists
- If strCurrentSetupVersion <> strSetupVersion Then
- ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- Exit Function
- Else
- ' The subkey 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory Agent' doesn't exist
- Err.Clear
- ' Check if the subkey 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- On error resume next
- strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent\DisplayVersion" )
- If Err.Number = 0 Then
- ' The subkey 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- If strCurrentSetupVersion <> strSetupVersion Then
- ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- Exit Function
- Else
- ' The subkey 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' doesn't exist
- Err.Clear
- ' Check if the subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- On error resume next
- strCurrentSetupVersion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent\DisplayVersion" )
- If Err.Number = 0 Then
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' exists
- If strCurrentSetupVersion <> strSetupVersion Then
- ShowMessage("Installation needed: " & strCurrentSetupVersion & " -> " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- Exit Function
- Else
- ' The subkey 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FusionInventory-Agent' doesn't exist
- Err.Clear
- ShowMessage("Installation needed: " & strSetupVersion)
- IsInstallationNeeded = True
- End If
- End If
- End If
- End If
- End Function
- Function IsSelectedForce()
- If LCase(Force) <> "no" Then
- ShowMessage("Installation forced: " & SetupVersion)
- IsSelectedForce = True
- Else
- IsSelectedForce = False
- End If
- End Function
- ' http://www.ericphelps.com/scriptin [...] 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
- Set WshShell = WScript.CreateObject("WScript.shell" )
- nMinutesToAdvance = 5
- ' 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
- If IsSelectedForce() Or IsInstallationNeeded(SetupVersion, SetupArchitecture, strSystemArchitecture) Then
- If isHttp(SetupLocation) Then
- ShowMessage("Downloading: " & SetupLocation & "/" & Setup)
- If SaveWebBinary(SetupLocation, Setup) Then
- strCmd = WshShell.ExpandEnvironmentStrings("%ComSpec%" )
- strTempDir = WshShell.ExpandEnvironmentStrings("%TEMP%" )
- ShowMessage("Running: """ & strTempDir & "\" & Setup & """ " & SetupOptions)
- WshShell.Run """" & 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: """ & SetupLocation & "\" & Setup & """ " & SetupOptions)
- WshShell.Run "CMD.EXE /C """ & SetupLocation & "\" & Setup & """ " & SetupOptions, 0, True
- ShowMessage("Deployment done!" )
- End If
- Else
- ShowMessage("It isn't needed the installation of '" & Setup & "'." )
- End If
- Set fso = WScript.CreateObject("Scripting.FileSystemObject" )
- fso.CreateFolder("\\test\Deploiement\installOK\testLigne370" )
|
Avez-vous une idée ? car je vois vraiment pas ce qui peut bloquer dans le script
|