ping poste à partir de liste machine (AD)

ping poste à partir de liste machine (AD) - Poste de travail - Systèmes & Réseaux Pro

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 c:/temps/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
Reply

Marsh Posté le 07-03-2017 à 16:07:52   

Reply

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)

Reply

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 :


$names = Get-Content ".\Computers.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
}
}

Reply

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)

 
Citation :


$names = Get-Content ".\Computers.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
}
}


 

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


Message édité par shusters95 le 08-03-2017 à 10:48:13

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 08-03-2017 à 10:50:44    

Tu as bien enlevé les "$" dans ton fichier CSV ?!

Reply

Marsh 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

 


Message édité par shusters95 le 08-03-2017 à 10:58:57

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :)


Message édité par shusters95 le 09-03-2017 à 00:22:30

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 08-03-2017 à 20:32:28    

J'ai rarement vu un truc aussi crade

Reply

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...


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :
  1. Get-ADGroupMember "GroupeName" |% {
  2. if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  3. Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  4. }
  5. else {
  6. Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  7. }
  8. }

Reply

Marsh Posté le 09-03-2017 à 09:44:16   

Reply

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 :
  1. $distant=[microsoft.win32.registrykey]::openremotebasekey("LOCALMACHINE",$nom_machine)
  2. $val=$distant.opensubkey("SYSTEM\currentcontrolset\control\terminal server" )
  3. $val.getvalue("fdenytsconnections" )
 


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


Message édité par shusters95 le 09-03-2017 à 12:04:42

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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.

Reply

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 ?


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :
  1. Get-ADGroupMember "Mongroupe" |% {
  2.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  3.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  4.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer1)
  5.         $RegKey= $Reg.OpenSubKey("SYSTEM\currentcontrolset\control\terminal server" )
  6.         $val = $RegKey.GetValue("fdenytsconnections" )
  7.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"fdenytsconnection"=$val }
  8.     }
  9.     else {
  10.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  11.     }
  12. }


Message édité par Je@nb le 09-03-2017 à 14:57:44
Reply

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)


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 09-03-2017 à 18:27:53    

à la dernière ligne met un | export-csv -notypeinformation -delimiter ";" -path moncsv.csv et zou

Message cité 1 fois
Message édité par Je@nb le 09-03-2017 à 18:28:10
Reply

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 ...


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 20-03-2017 à 11:02:16    

ça c'est ligne 10, pas la fin qui est ligne 12 :o

Reply

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:


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 20-03-2017 à 13:24:53    

chez moi ça marche :o

Reply

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
 
:o  
 
 


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 21-03-2017 à 11:56:57    

c'est pas la ligne 12 ni la commande que je t'ai indiqué :o
Je vais la refaire complètement alors ...
 
 

Code :
  1. Get-ADGroupMember "Mongroupe" |% {
  2.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  3.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  4.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer1)
  5.         $RegKey= $Reg.OpenSubKey("SYSTEM\currentcontrolset\control\terminal server" )
  6.         $val = $RegKey.GetValue("fdenytsconnections" )
  7.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"fdenytsconnection"=$val }
  8.     }
  9.     else {
  10.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  11.     }
  12. } | export-csv -notypeinformation -delimiter ";" -path moncsv.csv

Reply

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é :o
Je vais la refaire complètement alors ...
 
 

Code :
  1. Get-ADGroupMember "Mongroupe" |% {
  2.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  3.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  4.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer1)
  5.         $RegKey= $Reg.OpenSubKey("SYSTEM\currentcontrolset\control\terminal server" )
  6.         $val = $RegKey.GetValue("fdenytsconnections" )
  7.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"fdenytsconnection"=$val }
  8.     }
  9.     else {
  10.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  11.     }
  12. } | export-csv -notypeinformation -delimiter ";" -path moncsv.csv



 
 
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 ?


---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

Marsh Posté le 21-03-2017 à 15:32:37    

non, c'est à ça que sert le for each

Reply

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)


Message édité par shusters95 le 22-03-2017 à 10:08:45

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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.

Reply

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é.

Reply

Marsh Posté le 22-03-2017 à 11:20:42    

du coup $computer1 c'est une sorte de variable remote ?

 

je laisse $computer1 :

Code :
  1. KO: POSTE1 is down
  2. OK: POSTE2 is up
  3. You cannot call a method on a null-valued expression.
  4. At C:\Users\user\Desktop\script.ps1:8 char:32
  5. +         $val = $RegKey.GetValue <<<< ("version" )
  6.     + CategoryInfo          : InvalidOperation: (GetValue:String) [], RuntimeException
  7.     + FullyQualifiedErrorId : InvokeMethodOnNull
 


et si je met $_.Name

 
Code :
  1. KO: POSTE1 is down
  2. OK: POSTE2 is up
  3. Exception calling "OpenSubKey" with "1" argument(s): "Requested registry access is not allowed."
  4. At C:\Users\user\Desktop\script.ps1:7 char:33
  5. +         $RegKey= $Reg.OpenSubKey <<<< ("SOFTWARE\GS\packages\key" )
  6.     + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
  7.     + FullyQualifiedErrorId : DotNetMethodException
  8. You cannot call a method on a null-valued expression.
  9. At C:\Users\user\Desktop\script.ps1:8 char:32
  10. +         $val = $RegKey.GetValue <<<< ("version" )
  11.     + CategoryInfo          : InvalidOperation: (GetValue:String) [], RuntimeException
  12.     + FullyQualifiedErrorId : InvokeMethodOnNull
 

je comprends pas il me dit que c'est null la clé de registre alors qu'elle existe bien...


Message édité par shusters95 le 22-03-2017 à 11:23:36

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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."

Reply

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.
https://s10.postimg.org/498awcbv9/pdt.png
https://s10.postimg.org/3wbut1n9x/csvpdt.png
- Puis je test maitenant avec la variable en lieu et place $_.Name comme tu m'a dit = et la même erreur :

 

https://s7.postimg.org/qme7dgeef/Capture.png
https://s11.postimg.org/8ot61sghr/CsvNook.png

 

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 :
https://s4.postimg.org/42etwszll/bzvarcompu.png
- avec la variable name
https://s13.postimg.org/4ybh4o9df/bzname.png

 

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 :lol:)

 



Message édité par shusters95 le 22-03-2017 à 15:24:24

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :D. 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.

Reply

Marsh Posté le 23-03-2017 à 16:06:46    

J'ai mieux compris en effet cette histoire de droit et de variable en effet. :jap:

 

Merci ça fonctionne beaucoup mieux avec les droits :o

 

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


Message édité par shusters95 le 23-03-2017 à 16:38:13

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 ...
}

Reply

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
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 ...
}

 


Le psobject comme pour le UP ?

 

Pour le foreach ça se présenterais comme ça ? :

 
Code :
  1. $group = @("GROUP1","GROUP2" )
  2. foreach ($group in $groups) {
  3. Get-ADGroupMember $group |
  4.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  5.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  6.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',  $_.Name)
  7.         $RegKey= $Reg.OpenSubKey("SYSTEM\currentcontrolset\control\terminal server" )
  8.         $val = $RegKey.GetValue("fdenytsconnections" )
  9.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"fdenytsconnection"=$val }
  10.     }
  11.     else {
  12.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  13.     }
  14. } | export-csv -notypeinformation -delimiter ";" -path moncsv.csv
 

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 :
  1. $group = @("GROUP1","GROUP2" )
  2. foreach ($group in $groups) {
  3. Get-ADGroupMember $group |
  4.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  5.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  6.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $_.Name)
  7.         $RegKey= $Reg.OpenSubKey("SOFTWARE\GS\packages\BufferZone BufferZone"  )
  8.         $val = "NO"
  9.         $val = $RegKey.GetValue("version" )
  10.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"version"=$val
  11.        
  12.         $Reg2 = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',  $_.Name)
  13.         $RegKey2= $Reg2.OpenSubKey("SYSTEM\currentcontrolset\control\terminal server" )
  14.         $val2 = $RegKey2.GetValue("fdenytsconnections" )
  15.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"fdenytsconnection"=$val2 }
  16.     }
  17.     else {
  18.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  19.     }
  20. } | export-csv -notypeinformation -delimiter ";" -path moncsv.csv


Message édité par shusters95 le 24-03-2017 à 12:51:24

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :
  1. #Import modules AD
  2. import-module ActiveDirectory
  3. $groups = @("G1","G2" )
  4.     foreach ($group in $groups) {
  5. Get-ADGroupMember $group |% {
  6. #Si on arrive à pinger
  7.     if ( Test-Connection -ComputerName $_.Name -Count 1 -ErrorAction SilentlyContinue ) {
  8.         Write-Host "OK: $($_.Name) is up" -ForegroundColor Green
  9. #Vérification de la clé 1
  10.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $_.Name)
  11.         $RegKey= $Reg.OpenSubKey("SOFTWARE\GS\packages\BufferZone BufferZone"  )
  12.         $val = "NO KEY"
  13.         $val = $RegKey.GetValue("version" )
  14.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"version"=$val }
  15.         #Vérification de la clé 2
  16.         $Reg1 = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $_.Name)
  17.         $RegKey1= $Reg1.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\key"  )
  18.         $val1 = "NO KEY"
  19.         $val1 = $RegKey1.GetValue("DisplayVersion" )
  20.         New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"version uni"=$val2 }
  21.     }
  22. #Sinon KO
  23.     else {
  24.     Write-Host "KO: $($_.Name) is down" -ForegroundColor Red 
  25.     New-Object -TypeName PSObject -Property  @{"Computer"=$_.Name;"version"="NO PING"
  26.     }
  27. #Export du résultat en fichier CSV
  28.     }
  29. }
  30. }| export-csv -notypeinformation -delimiter ";" -path C:\csv\moncsvv.csv
 


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


Message édité par shusters95 le 24-03-2017 à 12:51:09

---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
Reply

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 :
  1. $groups = @("GROUP1","GROUP2" )
  2. $regkeys = @("SOFTWARE\SG\packages\BufferZone BufferZone\version",
  3. "SYSTEM\currentcontrolset\control\terminal server\fdenytsconnections" )
  4. $computerlist = @($groups |% { Get-ADGroupMember $_ } | select -Unique)
  5. $result = foreach ($computer in $computerlist) {
  6.    
  7.     $resulthash = @{"Name" = $computer.Name; "Status" = "DOWN" }
  8.     foreach ($regkey in $regkeys) { $resulthash[$regkey]="" }
  9.     if ( Test-Connection -ComputerName $computer.Name -Count 1 -ErrorAction SilentlyContinue ) {
  10.         Write-Host "OK: $($computer.Name) is up" -ForegroundColor Green
  11.         $resulthash["Status"] = "UP"
  12.        
  13.         $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computer.Name)
  14.            
  15.         foreach ($regkey in $regkeys) {
  16.             $RegKeyObject= $Reg.OpenSubKey($regkey.Substring(0,$regkey.LastIndexOf("\" )))
  17.             $resulthash[$regkey] = $RegKeyObject.GetValue($regkey.Substring($regkey.LastIndexOf("\" )+1,$regkey.Length-$regkey.LastIndexOf("\" )-1))
  18.         }
  19.        
  20.        
  21.     }
  22.     else {
  23.         Write-Host "KO: $($_.Name) is down" -ForegroundColor Red
  24.     }
  25.    
  26.     New-Object -TypeName PSObject -Property $resulthash
  27. }
  28. $result | export-csv -notypeinformation -delimiter ";" -path moncsv.csv

Reply

Marsh Posté le 24-03-2017 à 14:35:34    

"Powershell in a month of lunches" c'est bien pour démarrer  :o

Reply

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 :o


Message édité par Wolfman le 24-03-2017 à 14:44:13
Reply

Marsh Posté le 24-03-2017 à 15:46:09    

Testé et validé  :jap:
 
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  :jap:


Message édité par nebulios le 24-03-2017 à 15:57:26
Reply

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 :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed