[PowerShell]

[PowerShell] - Logiciels - Windows & Software

Marsh Posté le 20-01-2016 à 17:11:03    

Bonjour ici !
 
Je suis en train de réaliser un script PowerShell qui me permet de remonter les informations dont j'ai besoin sur certains postes de mon domaine. Je rencontre deux problèmes : le lancement en tant qu'Admin de ce script et deuxièmement, ce script se clôture automatiquement à la fin, m'empêchant de lire ces informations .. Pourtant dans l'ISE je visualise correctement le résultat ..  
 
En voici la structure :  
 
Do {
 
$Label =
 
            $Computer=Read-Host "Merci d'entrer le nom de la machine à interroger"
            Write-Host "Voici les informations dont je dispose sur la machine suivante :" $Computer
 
            # Lancement des requetes
            $job1 = Get-WmiObject [...] $Computer
            $job2 = Get-WmiObject [...] $Computer
            $job3 = Get-WmiObject [...] $Computer
 
 
            # Affichage des resultats
            echo $job1, $job2, $job3
 
             # Continuer ou arreter"
             $press=Read-Host "Voulez vous continuer ? (O/N)"      
 
             
} until ($press -eq "n" )
 
J'ai faux ?  
 
Merci  :bounce:

Reply

Marsh Posté le 20-01-2016 à 17:11:03   

Reply

Marsh Posté le 20-01-2016 à 17:28:14    

Suivant les infos que tu requète en WMI sur les postes distants, tu aura besoin des droits d'admin.
 
Concernant la récupération de tes résultats, je te conseille de les mettre dans un PSCustomObject.
 
Un exemple qui lis les lignes de $var  :

Code :
  1. $data = while ($var.Read())
  2. {
  3.     $obj = New-Object -Type PSCustomObject
  4.    
  5.     for ($i = 0; $i -lt $reader.FieldCount; $i++)
  6.     {
  7.         $obj | Add-Member -Type NoteProperty -Name $colNames[$i] -Value $reader.GetValue($i)
  8.     }
  9.     $obj
  10. }


Ensuite tu peux les afficher de plusieurs manières :

Code :
  1. #output in separate window
  2. $data | Out-GridView
  3. #output to csv file
  4. $data | export-csv C:\temp\someFile.csv
  5. #output to sysout
  6. $data | Format-table  -autosize | Out-String


Message édité par nex84 le 20-01-2016 à 17:28:31

---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Marsh Posté le 20-01-2016 à 17:42:59    

Merci de la réactivité !  
Concernant les droits admin je les ai mais je ne parviens pas à faire un clique droit exécuter en tant que .. Donc la solution que j'utilise pour le moment est de lancer une invite powershell en admin puis d'appeler mon script :/ une solution ?  
 
Concernant la sortie c'est une piste que je vais explorer :D mais je débute en powershell !

Reply

Marsh Posté le 05-02-2016 à 10:58:01    

Je reviens, j'ai pu avancer un peu malgré le boulot ... :pt1cable:  
J'ai ajouté une fonction qui réalise un export des comptes computer de l'AD vers un fichier .csv, sans problème
 
Je souhaite ensuite réutiliser ce fichier .csv (en particulier le champ "Name" ) pour réaliser la suite d'instruction ci dessous  
(# Lancement des requetes  
$job1 = Get-WmiObject [...] $Computer  
$job2 = Get-WmiObject [...] $Computer  
$job3 = Get-WmiObject [...] $Computer )
 
.. et les réécrire dans un fichier csv définitif ... :o Un peu d'aide ? :(

Reply

Marsh Posté le 05-02-2016 à 17:08:53    

Import-Csv + Foreach-Object

Reply

Marsh Posté le 05-02-2016 à 17:24:37    

Ah ! Je regarde ça !

Reply

Marsh Posté le 09-02-2016 à 10:19:03    

Re ici :bounce: !
 
J'ai bien suivi tes conseils mais je rencontre un problème ... Lorsque j'exécute le bloc suivant :  
 

Code :
  1. Import-Csv "C:\INFO_COMPUTER\Listing\Liste_Name.csv" -Header 'Name' | ForEach-Object {
  2. Get-WmiObject -Class Win32_BIOS -NameSpace "root\CIMV2" -ComputerName $_.Name | Select-Object Manufacturer,SerialNumber
  3. Get-WmiObject -Class Win32_ComputerSystem -NameSpace "root\CIMV2" -ComputerName $_.Name | Select-Object Model
  4.     Get-WmiObject -Class Win32_ComputerSystem -NameSpace "root\CIMV2" -ComputerName $_.Name | Select-Object -Property SystemType
  5. } | Export-Csv C:\CSV_TEST\test2.csv -NoTypeInformation -Encoding UTF8


 
Je ne récupère que les infos de mon premier Get-WmiObject dans mon fichier de sortie ..  C'est dû à une limitation de ForEach-Object ?
 
 :(

Reply

Marsh Posté le 09-02-2016 à 11:07:26    

Récupère le résultat des commandes avant de les traiter avec Export-Csv
 
Dans des variables par exemple.


---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Marsh Posté le 10-02-2016 à 17:29:45    

Hello, j'avance petit à petit, mais je bloque une fois de plus .. Je pense qu'il doit s'agir d'une incompréhension de ma part concernant les Objets PS ..
 
Lorsque j'exécute le code ci-dessous, je récupère un fichier.csv avec des doublons au niveau des computername (Si la machine est joignable, j'ai une ligne qui affiche "joignable" et une seconde ligne avec les résultats de mes requêtes WMI, si elle n'est pas joignable, une seule affichant non joignable).
 
Serait-il possible de m'expliquer où je me goure ?  :D  
 

Code :
  1. (Import-Csv C:\INFO_COMPUTER\Listing\Liste_Name.csv)| ForEach-Object {
  2.     $Reachable = Test-Connection -Cn $_.Name -BufferSize 16 -Count 1 -ea 0 -quiet
  3.      
  4.    
  5.    
  6.     #Si la machine est joignable
  7.     If ($Reachable) {
  8.         $bios = Get-WmiObject Win32_BIOS -NameSpace "root\CIMV2" -ComputerName $_.Name
  9.         $cs = Get-WmiObject Win32_ComputerSystem -NameSpace "root\CIMV2" -ComputerName $_.Name
  10.         $detail = "Joignable"
  11.        
  12.         New-Object PsObject -Property $props
  13.         $props = @{
  14.             ComputerName = $_.Name
  15.             SerialNumber = $bios.SerialNumber
  16.             Manufacturer = $cs.Manufacturer
  17.             Model = $cs.Model
  18.             HostName = $cs.Name
  19.             SystemType = $cs.SystemType
  20.                                }
  21.      
  22.     }
  23.    
  24.     #Sinon si la machine n'est pas joignable
  25.     Else {
  26.         $detail = "Injoignable"
  27.         Write-Warning "$_.Name n'est pas joignable"
  28.    
  29.            }
  30.            #Store the information from this run into the array 
  31.                [PSCustomObject]@{
  32.                ComputerName = $_.Name
  33.                Reachable = $reachable
  34.                Result = $detail
  35.                }
  36.                
  37.             #Progress bar
  38.             #$i=$i+1
  39.             #Write-Progress -activity "Request in Progress" -Status "Progress:" -percentcomplete ($i/$file.count*100)
  40. } | Sort ComputerName |
  41.         Select ComputerName,Result,SerialNumber,Manufacturer,Model,HostName,SystemType |
  42.             Export-Csv C:\CSV_TEST\test27.csv -NoTypeInformation #-Append


 
Egalement, j'essaye de mettre en place une barre de progression, sans grand succès, mais je ne me suis pas beaucoup penché sur la question ...  
 
 
Merci ! :love:

Reply

Marsh Posté le 01-03-2016 à 16:40:58    

Re ici !  
 
Nouveau défi : lorsque j'exporte mon fichier avec l'argument -Append, il me génère des doublons, ce qui est normal .. Je cherche à supprimer ces doublons sur un critère précis. Je m'explique : dans mon fichier je rencontre ceci :  
 
NomComputer, Injoignable
NomComputer, Joignable
...
 
Hors, une machine peut être injoignable lors de l'exécution de ma commande, mais lors de l'exécution prochaine pourrait répondre. Donc je me retrouve avec deux lignes pour le même NomComputer avec une joignable et une injoignable. Donc je cherche à filtrer et supprimer la ligne injoignable ..
 
Je ne sais même pas si je suis clair :(  
 
Merci quand même !

Reply

Marsh Posté le 01-03-2016 à 16:40:58   

Reply

Marsh Posté le 01-03-2016 à 21:50:04    

Un p'tit up ! À moins que je ne sois pas dans la bonne section ? :/

Reply

Marsh Posté le 02-03-2016 à 10:11:21    

Si ta version de Powershell est assez récente, regarde du coté des sessions WMI pour grouper toutes tes requètes WMI en une seule connexion.


---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Marsh Posté le 02-03-2016 à 12:34:16    

Du côté de mes requêtes, pas vraiment de problème pour le moment. À moins que ça résolve mon problème cité au dessus ?

Reply

Marsh Posté le 02-03-2016 à 14:59:31    

Avec cette méthode tu n'auras qu'une connection par machine distante.
 
Donc elle sera soit disponible, soit non. Mais une seule fois.


---------------
#TeamNoBidouille || Come to the Dark Side, we have cookies || Mangez 5 fruits et légumes par an ! || Le digital, c'est les doigts
Reply

Sujets relatifs:

Leave a Replay

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