Meilleur auteur de réponses
Obtenir l'état du service Netlogon

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
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
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.
- Modifié Loïc Veirman lundi 23 octobre 2017 18:53
-
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.- Modifié Loïc Veirman lundi 23 octobre 2017 19:01
-
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
- Modifié Steve Vibert mardi 24 octobre 2017 00:35
-
-
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
- Modifié Steve Vibert mardi 24 octobre 2017 11:58
-
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. -
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
-
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
- Modifié Loïc Veirman mardi 24 octobre 2017 19:16
-
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
-
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