Welcome to OCS Inventory NG community support, where you can ask questions and receive answers from other members of the community.

Please ask questions only in English or French.

Release 2.12.3 available

The official documentation can be found on https://wiki.ocsinventory-ng.org. Read it before asking your question.

Script vérif conformité fonctionnement de l'agent?

Bonjour, je dois mettre en place un script powershell qui s'assure du bon fonctionnement de l'agent OCS. Ce script sera exécuté à partir d'Intune et indiquera la non-conformité de l'agent en fonction de deux axes de vérification.
 

  1. État fonctionnel de l'agent (service windows)
  2. État de la communication entre l'agent et le serveur OCS
    Je tiens à mentionner que j'ignore volontairement pour l'instant l'erreur de communication "ERROR *** AGENT => Failed to send Prolog <Couldn't resolve host name>" car notre serveur est seulement accessible par vpn pour ceux en télétravail.

Je conviens que ce script n'est probablement pas parfait, et j'aimerais avoir vos commentaires et suggestions pour l'améliorer. Cordialement,

################################################################################################################

# Vérifie l'état de l'agent ocs inventory. Utilisé dans Intune via la fonction custom compliance script

# Version 0.4

# Par Patrick Gagné

#################################################################################################################

# Chemin du fichier de log

$logFilePath = "C:\ProgramData\OCS Inventory NG\Agent\ocsinventory.log"

# Chemin du fichier de log des erreurs

$errorLogFilePath = "c:\Outils\customcompliance_ocsinventory_error.log"

# Fonction pour journaliser les erreurs

function Log-Error {

    param (

        [string]$errorMessage

    )

    Add-Content -Path $errorLogFilePath -Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $errorMessage`r`n"

}

# Vérification du service OCS Inventory Service

    $ocsServiceOutput = Invoke-Expression -Command "C:\Windows\System32\sc.exe query 'OCS Inventory Service'"

# Extraction des codes de sortie à l'aide de Select-String

    $win32ExitCode = $ocsServiceOutput | Select-String 'WIN32_EXIT_CODE\s+:\s+(\d+)' | ForEach-Object { $_.Matches.Groups[1].Value }

    $serviceExitCode = $ocsServiceOutput | Select-String 'SERVICE_EXIT_CODE\s+:\s+(\d+)' | ForEach-Object { $_.Matches.Groups[1].Value }

# Vérification de l'état du service

if ($win32ExitCode -eq 0 -and $serviceExitCode -eq 0) {

    $AGENT_SERVICE_STATUS = $true

} else {

    $AGENT_SERVICE_STATUS = $false

}

# Si le fichier de log existe et des erreurs

if (Test-Path $logFilePath -PathType Leaf) {

    try {

        # Lecture du contenu du fichier

        $logContent = Get-Content $logFilePath -Raw

        # Recherche du dernier bloc d'informations débutant par "="

        $lastBlock = $logContent -split "={2,}" | Select-Object -Last 1

        # Recherche d'erreurs dans le dernier bloc

        $errorLines = $lastBlock -split "`r`n" | Where-Object { $_ -match "^ERROR \*\*\*" }

        # ...

        # Vérification s'il y a des erreurs dans le dernier bloc

if ($lastBlock -match "ERROR \*\*\*") {

    $errorLines = $lastBlock -split "`r`n" | Where-Object { $_ -match "^ERROR \*\*\*" }

    $errorFound = $false

    foreach ($errorLine in $errorLines) {

        # Vérification spécifique pour l'erreur "ERROR *** AGENT => Failed to send Prolog <Couldn't resolve host name>"

        if ($errorLine -match "^ERROR \*\*\* AGENT => Failed to send Prolog <Couldn't resolve host name>") {

            Write-Host "Erreur détectée : $errorLine. Ignorer la vérification de la communication réseau."

            $errorFound = $true

            break  # Sortir de la boucle dès qu'on a détecté cette erreur spécifique

        }

        # Log de l'erreur dans les autres cas

        Log-Error $errorLine

        $errorFound = $true

    }

    if ($errorFound) {

        $AGENT_COMMUNICATION_STATUS = $true  # Correction : définir à true car l'erreur spécifique est ignorée

    } else {

        $AGENT_COMMUNICATION_STATUS = $false

    }

} else {

    $AGENT_COMMUNICATION_STATUS = $true

}

        # ...

    } catch {

        Log-Error "An exception occurred during script execution: $_"

    }

}

# Création du tableau associatif

$hash = @{

    AgentServiceStatus = $AGENT_SERVICE_STATUS

    AgentCommunicationStatus = $AGENT_COMMUNICATION_STATUS

}

# Conversion du tableau associatif en format JSON compressé

return $hash | ConvertTo-Json -Compress

in OCS Inventory NG agent for Windows by (590 points)

3 Answers

0 votes
Il y a un moyen super simple de savoir si un agent fonctionne correctement : un agent qui fonctionne ... s'enregistre sur le serveur !

(Perso, j'évite de permettre powershell sur les postes clients ...)
by (20.1k points)
0 votes
Je ne crois pas qu'uniquement se baser sur le fait que l'agent était fonctionnel au moment de son installation est suffisant, il se peut qu'après une mise à jour ou autre événement l'agent cesse de fonctionner. Le but d'avoir un script de conformité est de s'assurer en tout temps que certaines choses (ici l'agent OCS) soient fonctionnelles. Pour ce qui est de l'utilisation de powershell, avec les bonnes mesures (signer les scripts, restrictions d'exécution,etc.) en place il est tout à fait correct de s'en servir.
by (590 points)
0 votes
Bonjour Patrick (car il me semble que vous vous appelez Patrick),

lorsque vous sollicitez de l'aide et espérez obtenir des commentaires, vous avez intérêt à peser vos mots et rester "ouvert" dans vos réponses pour ménager les susceptibilités de chacun (je dis ça, je dis rien...).

Maintenant, à la lecture de la réponse de @jacquesh qui a fait l'effort de vous répondre et qui suggère une autre approche, j'ai plutôt compris :

Lorsqu'un agent OCS fonctionne, il remonte un inventaire sur le serveur... Ce qui est tout à fait juste ! En d'autres termes, il faut plutôt s'intéresser aux agents qui ne remontent pas / plus au serveur OCS depuis...

Je suis de l'avis de @jacquesh : Pour ce que vous désirez obtenir, un script est-il vraiment nécessaire ?
by (32.6k points)
 
Powered by Question2Answer
...