Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1822 connectés 

  FORUM HardWare.fr
  Windows & Software
  Logiciels

  [PowerShell]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PowerShell]

n°3218398
Saguu
Posté le 20-01-2016 à 17:11:03  profilanswer
 

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:

mood
Publicité
Posté le 20-01-2016 à 17:11:03  profilanswer
 

n°3218399
nex84
Dura lex, sed lex
Posté le 20-01-2016 à 17:28:14  profilanswer
 

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
n°3218401
Saguu
Posté le 20-01-2016 à 17:42:59  profilanswer
 

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 !

n°3220169
Saguu
Posté le 05-02-2016 à 10:58:01  profilanswer
 

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 ? :(

n°3220206
nebulios
Posté le 05-02-2016 à 17:08:53  profilanswer
 

Import-Csv + Foreach-Object

n°3220210
Saguu
Posté le 05-02-2016 à 17:24:37  profilanswer
 

Ah ! Je regarde ça !

n°3220613
Saguu
Posté le 09-02-2016 à 10:19:03  profilanswer
 

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 ?
 
 :(

n°3220620
nex84
Dura lex, sed lex
Posté le 09-02-2016 à 11:07:26  profilanswer
 

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
n°3220810
Saguu
Posté le 10-02-2016 à 17:29:45  profilanswer
 

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:

n°3223381
Saguu
Posté le 01-03-2016 à 16:40:58  profilanswer
 

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 !

mood
Publicité
Posté le 01-03-2016 à 16:40:58  profilanswer
 

n°3223411
Saguu
Posté le 01-03-2016 à 21:50:04  profilanswer
 

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

n°3223476
nex84
Dura lex, sed lex
Posté le 02-03-2016 à 10:11:21  profilanswer
 

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
n°3223503
Saguu
Posté le 02-03-2016 à 12:34:16  profilanswer
 

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 ?

n°3223522
nex84
Dura lex, sed lex
Posté le 02-03-2016 à 14:59:31  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Windows & Software
  Logiciels

  [PowerShell]

 

Sujets relatifs
powershell: redirection dans un fichier csv[POWERSHELL]Upload vers FTP - remplacer si différent
[POWERSHELL] Script GraphiqueInstaller un .MSI en powershell
récupérer chaine de caractère dans un fichier .txt sous PowerShellPowershell : Passer une commande en mode variable via Invoke-command
Executer un script powershell au pas à pas automatiquementOutil gratuit Microsoft pour les admins : Powershell
Plus de sujets relatifs à : [PowerShell]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR