none
Obtenir l'état du service Netlogon RRS feed

  • Question

  • Bonjour 

    J'essaie de valider l'état du service netLogon sur mes à l'aide de la commande ci-dessous. Mais comme je suis relativement nouveau en powerscript je ne parviens pas à vérifier la présence du texte "Test NetLogon" et "Réussi" dans la string retourné par mon Invoke-Command.  J'ai essayé avec un index mais ça ne semble pas marcher 

    avez-vous une idée

     

    $strCommand = Invoke-Command -Session  $lstServer[$count] -ScriptBlock {dcdiag /test:netlogons } 
    $strFlag = $False
    for ($count2=0; $count2 -le $strCommand.Count ;$count2++){
        echo $count2 " = "  $strCommand [$count2] 
    if ($strFlag -eq $True) { 
    if ($strCommand[$count2] -contains "R?ussi") { 
    Echo "Test Netlogon réussi"
    }
    else {
    Echo "Test Netlogon non réussi"
    }
    }
    If ($strCommand[$count2] -contains "test NetLogons"){
    $strFlag = $True 
    }
    }
    }

          

    steve.vibert@urgences-sante.qc.ca

    lundi 23 octobre 2017 17:56

Réponses

  • D'où le test sur le failed :) De toute façon, le dcdiag ressort soit failed soit success (en français pour vous). Il n'y a aucun risque à traqué le Failed, au contraire.
    • Marqué comme réponse Steve Vibert mardi 27 février 2018 18:50
    mercredi 25 octobre 2017 14:22

Toutes les réponses

  • Il y a plus simple :

    switch( (Get-Service NetLogon).status )
    {
    "Running" { Write-host "service OK" }
    default { write-host "service is down !"}
    }

    Get-Service est un cmdlet spécifique à la gestion des services du système. 

    lundi 23 octobre 2017 18:49
  • Autre solution :

    $check =  & { dcdiag /test:netlogons }
    
    if ($check -like "*failed test NetLogons*") { ... }
    if ($check -like "*passed test NetLogons*") { ... }

    Ne pas oublier les autres résultats et faire une matrice de résultat. 


    lundi 23 octobre 2017 19:00
  • En fait, je me suis mal exprimé.

    Dans mon script, je vérifie si les services Netlogon, ntds et dns  sont démarrés avec un Get-services.

    Évidemment, la commande est exécuter avec "invoke-command" et une ps-sesssion qui est dans un tableau qui contient les session pour tout mes contrôleurs . La résultante est emmagasiné dans une variable et c'est cette dernière que j'ai de la misère à décoder.     

    Mais je voudrais également valider les informations sur Netlogon, replication DFS et les fsmo  qui sont fournis avec dcdiag afin de faire un rapports sur l'état de mes contrôleurs de domaine

    Voila, j'espère que c'est plus clair. 

      

     

     

    steve.vibert@urgences-sante.qc.ca


    mardi 24 octobre 2017 00:27
  • vous devriez modifier le script block pour qu'il vous retourne True/False plutôt que de le traiter en mass-shot. La raison vient du retour de la commande qui correspond à l'affichage écran de la commande (pas très pratique).
    mardi 24 octobre 2017 08:01
  • Et je fais ça comment ? 

    Comment transformer la réponse en état True/False ?

    Ça serait vraiment idéal d'avoir cette état puisque c'est pour intégrer à un tableau d'état?

    J'ai plusieurs autres résultats à obtenir avec la commande DCdiag. Comme je l'ai mentionner plus tôt je débute dans l'écriture de script Powershell et ne connais pas bien encore toutes les subtilités du langage. J'apprends vite mais apparemment pas assez :-)  

    Merci de votre aide 


    steve.vibert@urgences-sante.qc.ca


    mardi 24 octobre 2017 11:43
  • La réponse, c'est le retour que le script envoie à la commande. Par conséquent, il suffit que votre script-block gère une sortie en true/false :

    Invoke-Command -ScriptBlock { $result = Get-Process | ? { $_.Name -eq "notepad" } ; if ($result)
    { $true } else { $false } }
    
    

    Cet exemple retourne  true si Notepad exist comme process sur la machine.

    mardi 24 octobre 2017 14:35
  • Dans le cas d'une Get-service ou Get-process, c'est assez simple de le transformer en réponse True/False mais dans le cas d'un commande comme dcdiag, ça me semble beaucoup plus compliqué.

    Du moins , c'est l'impression que ça me donne.

    Le ScriptBlock avec DCdiag semble retourner un array mais j'arrive pas à trouver la référence pour l'état du NetLogon.

    Je suis peut-être pas assez connaissant ! :-(



    steve.vibert@urgences-sante.qc.ca

    mardi 24 octobre 2017 17:32
  • C'est parce que vous imaginez pouvoir traiter l'output de DCDIAG comme une série de retour que l'on peut analyser. Il n'en est rien en fait; c'est un string composé de toute une série de caractères d'échappements. Pour obtenir le même résultat que Get-Process, vous devez procéder à une analyse plus finaude. Par exemple, collecter la sortie du dcdiag dans une variable, puis tester le contenu et enfin définir une matrice de résultat. 

    $CheckNetLogons = invoke-command -Scriptblock { $result = & DCDIAG /TEST:NETLOGONS ; if ($result -like "*failed test NetLogons*") { $false } else { $true } }

    Vous pouvez même réaliser un test dcdiag complet, le stocker en variable puis l'analyser :

    $Dcdiag = invoke-command -ScriptBlock { . dcdiag }
    
    if ($dcdiag -like "*failed test netlogons*") { $chkNetLogons = $false } else { $chkNetLogons = $True }
    
    if ($dcdiag -like "*failed test dfsr*") { $chkDfsr = $false } else { $chkDfsr = $True }
    
    Write-Host "Test NetLogons: " $ChkNetLogons
    Write-Host "Test DFSR.....: " $ChkDfsr
    


    mardi 24 octobre 2017 19:15
  • Tout d'abord merci de votre aide Loic

    Je préférais par-contre vérifier la réussite plutôt que l'échec du test, ce qui est plus logique. Car si le test

    $dcdiag -like "*failed test netlogons*"

    ne trouve pas la string il considère que le test est bon. À mon avis il est plus sûr de vérifier la bonne conclusion du test afin de s'assurer de sa validité.

    Mais le problème sur mes contrôleurs la réponse est quelque chose comme  suit

    .................................................................Le test NetLogons

           de ServeurName a r'ussi 

    Alors j'ai de la difficulté à bien retrouver ces  ligne avec un -like


    steve.vibert@urgences-sante.qc.ca

    mercredi 25 octobre 2017 13:10
  • D'où le test sur le failed :) De toute façon, le dcdiag ressort soit failed soit success (en français pour vous). Il n'y a aucun risque à traqué le Failed, au contraire.
    • Marqué comme réponse Steve Vibert mardi 27 février 2018 18:50
    mercredi 25 octobre 2017 14:22