Script style fusion ou ocs inventory en local.

Fermé
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021 - Modifié le 3 nov. 2021 à 12:05
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 - 15 nov. 2021 à 11:34
Bonjour,

voila j'ai un petit soucis..

je suis admin réseau et j'aimerai me simplifier la tache au travail.

mon but étant de récupérer un certain nombre de chose sur un poste (PC ou serveur).

je n'ai jamais coder de ma vie ..... même si j'essaye et me torture la tête dessus j'avoue ne pas être très très bon la dedans meme pas du tout :D... c'est pourquoi je vous demande votre aide.. je ne sais pas quel langage sera le plus approprié non plus pour faire ce script

Mon beau projet XD

Récupération :

-Liste des user sur un poste et compte actif ou non
-Nom du poste et si il est en WorkGroup ou Domain ( savoir quel domaine)
-Le Winver
-Nom du compte office ( cela m’étonnerai que l'on puisse récupérer ça comme ça ... mais dans le doute XD )
-Info de connexion (carte reseau, ip .... )
-composant de la machine

je vous met mon powershell dégueu... mais bon c'est tout ce que j'ai réussis a faire pour le moment....


$Table = @"

$Users = Get-WmiObject -Class Win32_UserAccount

$Winver = (Get-WmiObject -class Win32_OperatingSystem).Caption

$Apps = Get-WmiObject -Class Win32_Product

$Reseau = Get-NetAdapter | Get-NetIPAddress

"@

$table | Out-File C:\test.txt


(avouez ça fait mal haha)


je vous remercie par avance,

bonne journée a vous
A voir également:

12 réponses

choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 nov. 2021 à 08:08
Bonjour
c'est vrai que ça fait mal.

Avant de voir tout ça.
Première question ... tu travailles sur un domaine active directory ?
si oui, quelle version Windows server ?
Et quelle version de powershell ?
0
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021
Modifié le 8 nov. 2021 à 09:22
Bonjour, je tiens a te remercié pour ton temps :)

alors non je travail sur des postes locaux, mais j'aimerais qu'il puisse aussi être déployable pour un AD.

ma version powershell est 5.1, et j'aimerai aussi qu'il tourne sur toute version de WS....


j'ai par contre ameliorer le loustique depuis : cependant je n'arrive pas le mettre en forme et proprement dans un XLSX ....


je galere au niveau de la mise en forme du tableau ....



# proco

$NomProco = Get-CimInstance -ClassName Win32_Processor | Select-Object Name
$DeviceIdProco = Get-CimInstance -ClassName Win32_Processor | Select-Object DeviceID
$CaptionProco = Get-CimInstance -ClassName Win32_Processor | Select-Object Caption
$MaxClockSpeedProco = Get-CimInstance -ClassName Win32_Processor | Select-Object MaxClockSpeed
$SocketDesignationProco = Get-CimInstance -ClassName Win32_Processor | Select-Object SocketDesignation

# Disque Dur

$DevicesIdDidsque = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DeviceID
$GenreDisque = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | Select-Object DriveType
$NomduVolume = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | Select-Object VolumeName
$TailleDisque = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | Select-Object Size
$EspaceDisponible = Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | Select-Object FreeSpace
$EtatdeVie = Get-PhysicalDisk | Select-Object HealthStatus
$TypedeDique = Get-PhysicalDisk | Select-Object MediaType
$NumerodeSerie = Get-PhysicalDisk | Select-Object SerialNumber
$Status = Get-PhysicalDisk | Select-Object OperationalStatus

# Reseau

$CarteReseau = Get-NetAdapter | Get-NetIPAddress | Select-Object InterfaceAlias
$AdresseIp = Get-NetAdapter | Get-NetIPAddress | Select-Object IPAddress
$FamilleAdresse = Get-NetAdapter | Get-NetIPAddress | Select-Object AddressFamily
$Prefixe = Get-NetAdapter | Get-NetIPAddress | Select-Object PrefixOrigin
$Validite = Get-NetAdapter | Get-NetIPAddress | Select-Object ValidLifetime

# Ram

$NomRam = Get-CimInstance win32_physicalmemory | Select-Object Name
$Description = Get-CimInstance win32_physicalmemory | Select-Object Description
$NumerodeSerie = Get-CimInstance win32_physicalmemory | Select-Object SerialNumber
$Capacite = Get-CimInstance win32_physicalmemory | Select-Object Capacity
$Vitesse = Get-CimInstance win32_physicalmemory | Select-Object Speed
$LongeurTotal = Get-CimInstance win32_physicalmemory | Select-Object TotalWidth
$TypeMemoireSMBIOS = Get-CimInstance win32_physicalmemory | Select-Object SMBIOSMemoryType

# Graphique

$CarteGraphique = wmic path win32_VideoController get name


# Regrouppement par composant

$Proco = $NomProco,$DeviceIdProco, $CaptionProco, $MaxClockSpeedProco, $SocketDesignationProco | Format-Table -AutoSize
$DisqueDur = $DevicesIdDidsque, $GenreDique, $NomduVolume, $TailleDisque, $EspaceDisponible, $EtatdeVie, $TypedeDique, $NumerodeSerie, $Status | Format-Table -AutoSize
$Reseau = $CarteReseau, $AdresseIp, $FamilleAdresse, $Prefixe, $Validite | Format-Table -AutoSize
$Ram = $NomRam, $Description, $NumerodeSerie, $Capacite, $Vitesse, $LongeurTotal, $TypeMemoireSMBIOS | Format-Table -AutoSize
$Graphique = $CarteGraphique

# Total

$Grup = $Proco, $DisqueDur, $Reseau, $Ram, $Graphique


# Tableau Excel

$ExcelObject = new-Object -comobject Excel.Application
$ExcelObject.visible = $true
$ExcelObject.DisplayAlerts =$false

# Create Excel file
$ActiveWorkbook = $ExcelObject.Workbooks.Add()
$ActiveWorksheet = $ActiveWorkbook.Worksheets.Item(1)
#Add Headers to excel file
$ActiveWorksheet.Cells.Item(1,1) = "Nom Du Processeur"
$ActiveWorksheet.cells.item(1,2) = "ID Du Proceseur"
$ActiveWorksheet.cells.item(1,3) = "Caption"
$ActiveWorksheet.cells.item(1,4) = "Max Clock Speed"
$ActiveWorksheet.Cells.Item(1,5) = "Socket Du Processeur"

$ActiveWorksheet.Cells.Item(1,6) = "Id Du Disque"
$ActiveWorksheet.Cells.Item(1,7) = "Type Du Disque"
$ActiveWorksheet.Cells.Item(1,8) = "Nom Du Volume"
$ActiveWorksheet.Cells.Item(1,9) = "Taille Du Disque"
$ActiveWorksheet.Cells.Item(1,10) = "Espace Disponible"
$ActiveWorksheet.Cells.Item(1,11) = "Etat Du Disque"
$ActiveWorksheet.Cells.Item(1,12) = ""
$ActiveWorksheet.Cells.Item(1,13)
$ActiveWorksheet.Cells.Item(1,14)
$ActiveWorksheet.Cells.Item(1,15)
$ActiveWorksheet.Cells.Item(1,16)
$ActiveWorksheet.Cells.Item(1,17)
$ActiveWorksheet.Cells.Item(1,18)
$ActiveWorksheet.Cells.Item(1,19)
$ActiveWorksheet.Cells.Item(1,20)
$ActiveWorksheet.Cells.Item(1,21)
$ActiveWorksheet.Cells.Item(1,22)
$ActiveWorksheet.Cells.Item(1,23)
$ActiveWorksheet.Cells.Item(1,24)
$ActiveWorksheet.Cells.Item(1,25)
$ActiveWorksheet.Cells.Item(1,26)
$format = $ActiveWorksheet.UsedRange
$format.Interior.ColorIndex = 19
$format.Font.ColorIndex = 11
$format.Font.Bold = "True"
}
#Loop through the Array and add data into the excel file created.
foreach ($line in $Activeusers){
($user_id,$user_name,$Costcntr,$ApprMgr) = $line.split('|')
$introw = $ActiveWorksheet.UsedRange.Rows.Count + 1
$ActiveWorksheet.cells.item($introw, 1) = $NomProco
$ActiveWorksheet.cells.item($introw, 2) = $DeviceIdProco
$ActiveWorksheet.cells.item($introw, 3) = $CaptionProco
$ActiveWorksheet.cells.item($introw, 4) = $MaxClockSpeedProco
$ActiveWorksheet.Cells.item($introw, 5) = $SocketDesignationProco
$ActiveWorksheet.cells.item($introw, 6) =
$ActiveWorksheet.cells.item($introw, 7)
$ActiveWorksheet.cells.item($introw, 8)
$ActiveWorksheet.cells.item($introw, 9)
$ActiveWorksheet.cells.item($introw, 10)
$ActiveWorksheet.cells.item($introw, 12)
$ActiveWorksheet.cells.item($introw, 13)
$ActiveWorksheet.cells.item($introw, 14)
$ActiveWorksheet.cells.item($introw, 15)
$ActiveWorksheet.cells.item($introw, 16)
$ActiveWorksheet.cells.item($introw, 17)
$ActiveWorksheet.cells.item($introw, 18)
$ActiveWorksheet.cells.item($introw, 19)
$ActiveWorksheet.cells.item($introw, 20)
$ActiveWorksheet.cells.item($introw, 21)
$ActiveWorksheet.cells.item($introw, 22)
$ActiveWorksheet.cells.item($introw, 23)
$ActiveWorksheet.cells.item($introw, 24)
$ActiveWorksheet.cells.item($introw, 25)
$ActiveWorksheet.cells.item($introw, 26)
$ActiveWorksheet.cells.item($introw, 27)
$ActiveWorksheet.UsedRange.EntireColumn.AutoFit();
}
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 nov. 2021 à 10:07
Personnellement, je verrais du côté de fichiers *.CSV...
C'est ce que j'utilise pour mes rapports de gestion de parc.

Faciles à manipuler avec Powershell et compatible avec Excell.
Pas de soucis de mise en forme en tous cas.

ci-dessous, un exemple de manipulation de ce genre de fichier.

# Manipulation de fichiers CSV

# 1 Import CSV

# Exemple de transfert d'un fichier source vers un fichiers de destination

# Contenu du fichier CSV

# DossierSource;DossierDestination
#"E:\Labo Powershell\Temp\SOURCE";"E:\Labo Powershell\Temp\DESTINATION"

Import-Csv -Path "E:\Labo Powershell\Temp\democsv.csv" -Delimiter ";"

# si problème avec les accents, utiliser -Encoding

# Pour sélectionner qu'une sule colonne

Import-Csv -Path "E:\Labo Powershell\Temp\democsv.csv" -Delimiter ";" -Header DossierSource # ou | Select DossierSource

# Pour expoitter le fichier CSV, stocker dans une variable

$CSV = Import-Csv -Path "E:\Labo Powershell\Temp\democsv.csv" -Delimiter ";"

$CSV

# Faire une boucle pour lister l'ensemble des lignes du fichier CSV et appliquer un traitement

Foreach($Ligne in $CSV){ Write-Host $Ligne }

Foreach($Ligne in $CSV){ Write-Host $Ligne.DossierSource }

#Nous pouvons même créer des retours sous formes de phrase

Foreach($Ligne in $CSV){ Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"}

#Transfert Des Fichiers de DossierSource vers DossierDesintation

$CSV = Import-Csv -Path "E:\Labo Powershell\Temp\democsv.csv" -Delimiter ";"

Foreach($Ligne in $CSV){ 

    Write-Host "Données transférées de $($Ligne.DossierSource) vers $($Ligne.DossierDestination)"

    Move-Item -Path "$($Ligne.DossierSource)\*" -Destination "$($Ligne.DossierDestination)"

}

#2. Exporter au format CSV

# Lister les services des systèmes avec des colonnes Name, display et status

Get-Service

# Si export en l'état, toutes les propriétés même cachées seront intégrées.

Get-Service | Select-Object DisplayName, Name, Status

# ajout d'un Pipe pour l'export

Get-Service | Select-Object DisplayName, Name, Status | Export-Csv -Path "E:\Labo Powershell\Temp\Sevices.csv" -Delimiter ";"

Import-Csv -Path "E:\Labo Powershell\Temp\Sevices.csv" -Delimiter ";"

#Pour écrire dans un fichier CSV en ajoutant le contenu à la fin du fichier sans écraser,
#ajouter l'option -append.
#à partir de la version PSH 7, -useQuotes Always va encodrer les données par des guillemets, sinon -useQuotes Never permet de mieux gérer les chaînes de caractères si besoin.
#-useQuotes AsNeeded permet de laisser le système gérer le besoin de guillemets.
#-QuoteFields permet de déterminer pour quelle colonne l'on impose les guillemets.

#3. #Créer son propre CSV

#Ex fichiers logs

New-Item -ItemType File -Path "E:\Labo Powershell\Temp\Log.csv" -Force

Add-Content -Path "E:\Labo Powershell\Temp\Log.csv" -Value "Date;Type;Message"

Get-Content "E:\Labo Powershell\Temp\Log.csv"

Add-Content -Path "E:\Labo Powershell\Temp\Log.csv" -Value "$(Get-Date -Format yyyyMMdd_HHmm) ; Erreur;Voici le soucis!"

Get-Content "E:\Labo Powershell\Temp\Log.csv"

Import-Csv -Path "E:\Labo Powershell\Temp\Log.csv" -Delimiter ";"

# Nous pouvons filtrer sur erreur

Import-Csv -Path "E:\Labo Powershell\Temp\Log.csv" -Delimiter ";" | Where { $_.Type -eq "Erreur"}


0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 nov. 2021 à 10:09
jette un oeil là-dessus ... très pratique en tous cas
0
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021
Modifié le 8 nov. 2021 à 10:17
Ah super merci beaucoup je vais regarder alors pour mettre tout ca dans un CSV, pour ce qui est de la gestion des cellules (format ....) comment cela ce passe ? :S


j'ai aussi beaucoup de variable differentes .... comment faire pour placé tel ou tel variable dans la bonne cellule ?

merci beaucoup
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
Modifié le 8 nov. 2021 à 10:33
travaille par colonne ...

colonne1;colonne2; colonne3

ça se sont les entêtes ...

à toi de gérer la manière de remplir tes colonnes...

New-Item -ItemType File -Path "chemin\tonfichier.csv" -Force


tu crées ton fichier, s'il n'existe pas bien sûr.

Add-Content -Path "chemin\tonfichier.csv" -Value "colonne1;colonne2;colonne3"


Tu définis les entêtes de colonnes

Add-Content -Path "chemin\tonfichier.csv" -Value "donnée1;donnée2;donnée3"


Là tu places tes différentes variables dans le même ordre que tes entêtes.
Mis dans une boucle, les différentes entrées seront créées par ligne et dans l'ordre des entêtes.




0
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021
8 nov. 2021 à 10:36
je te remercie infiniment !

cela va grandement m'aider !

j'avoue qu'en une semaine j'ai "appris a PowerShell"

et la je me sens plus que pret a dev XD

merci encore,
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
8 nov. 2021 à 11:16
pas de soucis ..
Si besoin, n'hésite pas..
Pour plus de clarté, reste sur ce post.
0
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021
8 nov. 2021 à 16:39
euh finalement j'aurai besoin d'un peu d'aide encore ... en gros vis a vis de mon script, je dois d'abord l'exporter en csv ? enfin je reste bloque (je me suis perdus dans l'ordre des chose ... )

ou en txt puis l'exporter en csv ? sachant que la mise en forme du tableau csv doit etre faite lors de ca creation j'imagine ...
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
Modifié le 9 nov. 2021 à 07:30
tu crées ton CSV au début du script, ensuite tu récupéres tes données au fur à mesure et tu les ajoutes à ton csv en veillant à suivre l'ordre de tes entêtes. Pas besoin de txt.
l'idéal étant de faire ça dans une boucle, scanner ton réseau (par ip par exemple) et interroger chaque machine à distance à l'aide des outils PSSession et invoke-command..

Je te fournis un exemple dès que possible.




0
TearDrops Messages postés 6 Date d'inscription mercredi 3 novembre 2021 Statut Membre Dernière intervention 10 novembre 2021
10 nov. 2021 à 09:57
super merci, le soucis c'est que je ne sais pas comment faire un boucle en integrant mes résultats de variables .... car je ne comprends pas le fonctionnement des bouccles ....

je suis une boulet tu peux le dire haha ...


j'essaye des trucs mais c'est pas évident en plus lorsque je créer le CSV sois rien ne s’affiche dedans sois il est écrit dans des colonnes et lignes différents lengt 10 (comme si il ne savait pas inscrire les données ....

j'ai l'impression d'avoir compris les commandes et variables mais le reste je patauge ....
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
Modifié le 10 nov. 2021 à 14:04
Bonjour ..
Une solution possible est de travailler sur base d'un fichier *.txt reprenant les adresses IP de tes machines (un IP par ligne).
Ici un exemple pour récupérer le nom de la machine et afficher toutes les infos système.

Get-Content C:\Mes_Adresses_IP.txt | ForEach-Object{
              $nomHote = ([System.Net.Dns]::GetHostByAddress($_)).Hostname
                          if($? -eq $True) {
                                                     Write-host $nomHote
                                                     Get-CimInstance -Class CIM_ComputerSystem -ComputerName $nomHote  -ErrorAction Stop | Select-Object * | Out-GridView
                                                     
                                                     }
                          else {
                                    Write-Host $_ +"Nom PC Inconnu"
                                     }
}




0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
10 nov. 2021 à 10:45
Pour info, les fichiers CSV ne gèrent pas la mise en page.
Ce n'est qu'une succession d'infos séparées par ";".
0
choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
15 nov. 2021 à 11:34
si ton problème est résolu, merci de le signifier.
0