ping poste à partir de liste machine (AD) - Poste de travail - Systèmes & Réseaux Pro
Marsh Posté le 07-03-2017 à 16:46:56
Tu construis une array avec et tu envoies ça sur le cmdlet Test-Connection. Je ne me souviens plus s'il accepte le pipe par contre, il faut tester (si ça ne marche pas -> foreach)
Marsh Posté le 07-03-2017 à 17:41:33
Cadeau : (en partant d'un fichier contenant une liste de postes, à toi de l'adapter)
Citation : |
Marsh Posté le 08-03-2017 à 10:48:03
Wolfman a écrit : Cadeau : (en partant d'un fichier contenant une liste de postes, à toi de l'adapter)
|
yop merci pour la réponse tout d'abord !
j'ai un soucis lors que je met mon chemin du csv qui ressort il me sort tout mes postes en down, alors qu'en les pingant un par un j'ai des postes qui répondent bien au ping... étrange
Marsh Posté le 08-03-2017 à 10:50:44
ReplyMarsh Posté le 08-03-2017 à 10:54:17
Wolfman a écrit : Tu as bien enlevé les "$" dans ton fichier CSV ?! |
Zut j'avais pas vu !
mais quel élément rajouter pour qu'il ne me mette pas les $ en sortie
car j'ai voulu rajouter des délimiter ";" mais ça ne passe pas
Marsh Posté le 08-03-2017 à 12:57:30
import-module ActiveDirectory
Get-ADGroupMember "GroupeName" | Select name | export-Csv -NoTypeInformation C:\adit\mon.txt
$content = Get-Content "C:\adit\mon.txt" | foreach { $_ -replace "$","" }
Set-Content -Path "C:\adit\mon.csv" -Value $content
$names = Get-Content "C:\temp\mon.txt"
foreach ($name in $names) {
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue ) {
Write-Host "OK: $name is up" -ForegroundColor Green
}
else {
Write-Host "KO: $name is down" -ForegroundColor Red
}
}
Il me sort bien les nom de poste sans les dollars mais toujours pareil ça ne ping pas ... resultat sur chaque poste c'est down
EDIT : c'est good c''était les " " cette fois ci
Marsh Posté le 09-03-2017 à 00:21:19
Je@nb a écrit : J'ai rarement vu un truc aussi crade |
pas cool de critiquer... je fais du mieux que je peux, c'est pas mon fort le scripting... désoler si je vous chagrine avec mon code...
Marsh Posté le 09-03-2017 à 09:44:16
c'est quoi l'intéret de faire un export dans un csv ?
Un simple :
Code :
|
Marsh Posté le 09-03-2017 à 10:36:48
salut effectivement c'est beaucoup plus simple merci Je@nb.
par contre j'aimerais juste rajouter une difficulté, c'est que si j'arrive à pinger le poste, il faudrait que le script aille lire une clé de registre et me l'afficher voici ce qui me semble répondre à mon besoin (je devrais juste adapter la clé de registre) :
Code :
|
ma question est : est ce que je peut mettre un elseif pour exécuter ma condition dans mon if ?
merci pour vos réponses, j'aime beaucoup le powershell c'est vraiment sympa, mais j'ai un peu de mal avec la logique à vrais dire
j'aimerais beaucoup me former sur ce langage
Marsh Posté le 09-03-2017 à 11:54:48
Passe plutôt par un Get-ChildItem pour récupérer une clé de registre. Tu dois pouvoir faire un Test-Path pour vérifier son existence aussi.
Marsh Posté le 09-03-2017 à 13:46:55
yop,
si je te suis, si je fais un : Get-ChildItem -Path Registry::HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters | Select-Object searchlist
c'est vide alors que j'ai une liste renseigner, ai je oublié une info ?
Marsh Posté le 09-03-2017 à 14:56:48
Pour ce genre d'infos je préfère passer par SCCM et l'inventaire ou tout autre soft d'inventaire.
Après suffit de faire un truc comme ça :
Code :
|
Marsh Posté le 09-03-2017 à 17:32:10
merci encore Je@nb
une dernière chose, concernant ensuite l'exportation du résultat dans un fichier CSV on le fait à la fin du script ou à la fin du if avec une boucle ? (je pencherais pour la deuxième solution)
Marsh Posté le 09-03-2017 à 18:27:53
à la dernière ligne met un | export-csv -notypeinformation -delimiter ";" -path moncsv.csv et zou
Marsh Posté le 20-03-2017 à 10:45:55
Je@nb a écrit : à la dernière ligne met un | export-csv -notypeinformation -delimiter ";" -path moncsv.csv et zou |
salut j'ai bien mis comme tu m'a dit à la fin après mon :
Write-Host "KO: $($_.Name) is down" -ForegroundColor Red | export-csv -notypeinformation -delimiter ";" -path moncsv.csv #Export du résultat en fichier CSV
j'ai bien un CSV de crée mais il est vide ...
Marsh Posté le 20-03-2017 à 12:22:05
Très bien je l'ai rajouter à la ligne 12
mais j'ai cela lorsque je lance le script :
cmdlet Export-Csv at command pipeline position 1
Supply values for the following parameters:
InputObject:
Marsh Posté le 21-03-2017 à 11:47:01
fin de mon script :
else {
Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
}
#Export du résultat en fichier CSV
export-csv -notypeinformation -delimiter ";" -path C:\csv\moncsv.csv }
fin de ma commande PS :
cmdlet Export-Csv at command pipeline position 1
Supply values for the following parameters:
InputObject: (je tape une lettre car il veut une entrée)
le fichier csv :
Length
1
Marsh Posté le 21-03-2017 à 11:56:57
c'est pas la ligne 12 ni la commande que je t'ai indiqué
Je vais la refaire complètement alors ...
Code :
|
Marsh Posté le 21-03-2017 à 15:23:46
Je@nb a écrit : c'est pas la ligne 12 ni la commande que je t'ai indiqué
|
Merci Je@nb
Par contre je viens de tilter mais dans le groupMember il y a plusieurs Computer et du coup là il ne lit la clé qu'au $Computer1, non ?
Marsh Posté le 22-03-2017 à 10:05:38
salut,
en faite je trouve étrange que le code que tu m'a filer sur le post d'avant fonctionne car justement tu me parle de for each mais il n'y en a pas donc comment fait il pour boucler, ensuite la variable $computer1 n'est pas déclarer en début de script... étrange
(j'essaye de comprendre le script sans faire de copier coller bête)
Marsh Posté le 22-03-2017 à 10:14:28
C'est du .Net. Explications ici par exemple : https://www.reddit.com/r/PowerShell [...] ce_please/
Citation : where $computer1 is the remote machine. |
Marsh Posté le 22-03-2017 à 10:21:00
Le foreach c'est le |% { }
Par contre en effet le $computer1 c'est faux, ça doit être $_.Name désolé.
Marsh Posté le 22-03-2017 à 11:20:42
du coup $computer1 c'est une sorte de variable remote ?
je laisse $computer1 :
Code :
|
et si je met $_.Name
Code :
|
je comprends pas il me dit que c'est null la clé de registre alors qu'elle existe bien...
Marsh Posté le 22-03-2017 à 11:43:57
$computer1 c'est rien, c'est vide, c'est un mauvais copié collé de ton premier script.
L'erreur est claire pourtant "Requested registry access is not allowed."
Marsh Posté le 22-03-2017 à 15:15:57
C'est vraiment étrange quand même je m'explique :
Je teste avec deux clés de registres :
Symantec Endpoint Protection
- Je test avec la variable $computer1 = ça marche sans soucis j'ai la liste des machines extrait en CSV.
- Puis je test maitenant avec la variable en lieu et place $_.Name comme tu m'a dit = et la même erreur :
Exception calling "OpenSubKey" with "1" argument(s): "Requested registry access is not allowed."
At C:\Users\\Desktop\bfz\ty.ps1:7 char:33
+ $RegKey= $Reg.OpenSubKey <<<< ("SOFTWARE\SG\packages\Symantec DLP" )
+ CategoryInfo : NotSpecified: ( [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
You cannot call a method on a null-valued expression.
At C:\Users\\Desktop\bfz\ty.ps1:8 char:32
+ $val = $RegKey.GetValue <<<< ("version" )
+ CategoryInfo : InvalidOperation: (GetValue:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Je ne comprends pas car ça fonctionne bien avec l'autre variable et de plus je suis bien en ADMIN.
Maintenant avec mon autre clé de registre "BufferZone"
- avec la variable computer1 :
- avec la variable name
pareil je lance toujours en admin, du coup incompréhension de ma part avec la variable $name et $computer1 (qui sort de nule part, le mauvais copier coller, mais qui fonctionne )
Marsh Posté le 23-03-2017 à 10:09:05
normal vu que $computer1 est vide du coup il prend le pc local et pour lui tu as les droits ... Mais toutes les clés vont être les même vu que à chaque fois il va interroger le pc local et pas le pc de la variable . Ya pas de magie hein .... La colonne Computer c'est le script qui la génère et c'est $_.Name qu'il affiche.
Et qd tu utilises $_.Name, il essaie bien de se connecter sur l'ordinateur distant mais il n'y arrive pas. L'erreur est claire tu as pas les droits de faire du remote registry. Donc donne toi les droits et tu pourras le faire.
Quand à l'autre erreur c'est que la clé n'existe pas.
Marsh Posté le 23-03-2017 à 16:06:46
J'ai mieux compris en effet cette histoire de droit et de variable en effet.
Merci ça fonctionne beaucoup mieux avec les droits
par contre petit hic il ne me renseigne pas les poste DOWN dans mon CSV, bizarre non ?
autre question, si je veux rajouter un deuxième ou trosième groupemember, ce que je fait c'est que je copie et colle le bloc d'instruction et je change juste le groupe member, je n'ai pas trouver la solution plus légère
j'ai trouvé ça : https://social.technet.microsoft.co [...] powershell
et en essayant de mettre un AND j'ai des erreurs
Marsh Posté le 23-03-2017 à 16:38:23
non c'est pas bizarre il génère pas d'objets s'il est down
si tu veux qu'il génère qqch suffit de sortir un psobject avec les infos que tu veux
suffit de faire un tableau des groupes et faire un foreach de chaque groupe
$groups = @("GROUP1","GROUP2" )
puis
foreach ($group in $groups) {
Get-ADGroupMember $group ...
}
Marsh Posté le 24-03-2017 à 10:03:56
Je@nb a écrit : non c'est pas bizarre il génère pas d'objets s'il est down
$groups = @("GROUP1","GROUP2" ) puis foreach ($group in $groups) { |
Le psobject comme pour le UP ?
Pour le foreach ça se présenterais comme ça ? :
Code :
|
Du coup si je comprends bien si je veux qu'il lise une deuxième clé et l'inserer dans le tableau en comparaison :
Code :
|
Marsh Posté le 24-03-2017 à 12:39:57
Voici mon script derniere version
En suivant vos indication des modification
et en plus une clé que j'ai rajouter pour comparaison
qu'en pensez vous ?
Code :
|
j'ai une erreur à la fin : au niveau de mon export-csv, c'est mon pipe qui gêne
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: ( [], ParseException
+ FullyQualifiedErrorId : EmptyPipeElement
Marsh Posté le 24-03-2017 à 14:07:58
Manque un s à group ligne 1 ...
Sinon un truc du genre ça peut le faire mieux
Code :
|
Marsh Posté le 24-03-2017 à 14:35:34
"Powershell in a month of lunches" c'est bien pour démarrer
Marsh Posté le 24-03-2017 à 14:44:02
Ca ? https://www.amazon.fr/Learn-Windows [...] b_title_bk
C'est bien comme bouquin ? Je suis un bitos en powershell, mais vu mon métier ça serait bien que je m'y plonge quand même
Marsh Posté le 24-03-2017 à 15:46:09
Testé et validé
Pour du script/automatisation il faut aussi ajouter Powershell Toolmaking in a month of lunches. Les deux auteurs sont les références sur Powershell après Jeffrey Snover.
En plus, pas besoin de connaissances en programmation/algo, ce sont des livres vraiment orientés admin et production.
Même un blaireau en scripting comme moi a réussi à en tirer quelque chose, c'est dire
Marsh Posté le 24-03-2017 à 16:04:04
Vu que je dois être au même niveau de blaireausité que toi, voire pire, je me le mets sous le coude
Marsh Posté le 07-03-2017 à 16:07:52
bonjour,
j'ai besoin de vos lumières
je m'explique, j'ai besoin de pinger une liste de machine dans un groupe AD,
pour cela j'ai fais :
import-module activedirectory
get-adgroupmember "lenomdugroupe" | select samaccountname | export-csv -notypeinformation ctemps/fichierposte.csv
ce que ça me sort :
samaccountname
PR010504086L$
PR010504086L$
PR010504086L$
PR010504086L$
j'aimerais donc a partir de ce fichier pinger toute la liste de ces poste et me ressortir un autre fichier csv en resultat avec unreachable si ping KO et success si ping OK.
avez vous une idée ou si vous pouvez m'éclairer car je séche un peu ...
merci d'avance
---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0