Bonjour,

J'ai actuellement ce script :
Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
                                ####################################################################
                                ##### LISTE RESSOURCES MATERIELS / KB / LOGICIELS / SERVICES / #####
                                #####      PROCESSUS / CLE REGISTRE / USER / LASTLOGON         #####
                                ####################################################################
 
 
##### Purge l'écran #####
clear
 
##### Création du tableau #####
$myObject = New-Object System.Object
 
##### Création des variables : #####
    #Variables pour le nom du fichier de destination :
    $dir = "E:\Exo_05-04-17"
    $date = Get-Date -format "yyyy-MM-dd"
    $name = $env:COMPUTERNAME
    $rstname = "$dir\$date.$name.txt"
    $rstcsv = "$dir\rst\$date.$name.csv"
 
    #Variables fichiers texte sources :
    $srckb = get-content "$dir\src\srckb.txt"        #Source MAJ's
    $srclogi = get-content "$dir\src\srclogi.txt"    #Source logiciels
    $srcsvc = get-content "$dir\src\srcsvc.txt"      #Source services 
    $srcproce = get-content "$dir\src\srcproce.txt"  #Source processus
    $srcreg = get-content "$dir\src\srcreg.txt"      #Source registre
 
    #Chemin d'accès users : 
    $srcusers = "C:\Users\"
 
##### 1er colonne du tableau #####
$myObject | Add-Member -type NoteProperty -name "log $name" -value ""
 
##### Suppression des fichiers destination déjà existant #####
    #Si le fichier txt de destination existe déjà, on le supprime
    If (Test-Path $rstname) { Remove-Item -Path $rstname }
 
    #Si le fichier csv de destination existe déjà, on le supprime
    #If (Test-Path $rstcsv) { Remove-Item -Path $rstcsv }
 
##### Démarrage de la transcription dans le fichier de destination #####
Start-Transcript -path $rstname -Append
 
 
##### /////Ressources matériels :\\\\\ #####
write-host ""
write-host "//Ressources matériels :\\"
write-host ""
    #Processeur -Nombre de processeurs + Cadence processeur- :
    foreach ($proc IN gwmi -ComputerName $name -Class Win32_Processor){
        $nbproc = $proc.NumberOfLogicalProcessors
        $cadproc = [Math]::round($proc.MaxClockSpeed /1000,2)
    }
    write-host "Nombre de processeur : $nbproc "
    write-host "Cadence : $cadproc GHz"
 
 
    #RAM -RAM totale + RAM utilisé- : 
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
 
    foreach ($ramcomputer IN gwmi -ComputerName $name -Class Win32_ComputerSystem){
        $ramtotale = [Math]::round($ramcomputer.TotalPhysicalMemory /1GB,1)
    }
    foreach ($ramoperating IN gwmi -ComputerName $name -Class Win32_OperatingSystem){
        $ramlibre = [Math]::round($ramoperating.FreePhysicalMemory /1MB,1)
    }
    $ramutil = $ramtotale - $ramlibre
    write-host "RAM totale : $ramtotale Go"
    write-host "RAM utilisé : $ramutil Go"
 
    #Disque dur -Nb DD + Espace total + Espace libre- :  #Que dd interne pas support externe
    $nbdd = gwmi -ComputerName $name -Class Win32_LogicalDisk -Filter "DriveType = 3" | Measure-object
    $nbddcount = $nbdd.count
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
    write-host "Nombre de disques dur :"$nbddcount
 
    foreach($volume IN gwmi -ComputerName $name -Class Win32_LogicalDisk -Filter "DriveType = 3") {
        $ddtotale = [Math]::round($volume.size /1024/1024/1024,1)
        $ddlibre = [Math]::round($volume.FreeSpace /1024/1024/1024,1)
        write-host $volume.name $volume.VolumeName
        write-host "Espace disque totale : $totale Go"
        write-host "Espace disque libre : $libre Go"
        write-host ""
    } 
 
    #Déclaration du tableau :
        #Proc
        $myObject | Add-Member -type NoteProperty -name "nbproc : $nbproc" -Value ""
        $myObject | Add-Member -type NoteProperty -name "cadproc : $cadproc Ghz" -Value ""
        #RAM 
        $myObject | Add-Member -type NoteProperty -name "RAMtotale : $ramtotale Go" -Value ""
        $myObject | Add-Member -type NoteProperty -name "RAMutil : $ramutil Go" -Value ""
        #Disque Dur
        $myObject | Add-Member -type NoteProperty -name "nbDD : $nbddcount" -Value ""
        $myObject | Add-Member -type NoteProperty -name "DDTotale : $ddtotale Go" -Value ""
        $myObject | Add-Member -type NoteProperty -name "DDlibre : $ddlibre Go" -Value ""
 
 
##### /////Présence de :\\\\\ #####
write-host ""
write-host "//Présence de :\\"
    #KB -Vérifie si KB existe depuis fichier txt externe- : 
    write-host ""
    write-host "Mises à jour sur la machine $name :"
 
    foreach ($kb in $srckb) {
        if (get-hotfix -id $kb -ComputerName $name -ErrorAction 4) { 
            write-host "- $kb est installée."
            $myObject | Add-Member -type NoteProperty -name "Update $kb installee" -value "" -Force
        } else { 
            write-host "- $kb n'est pas installée."
            $myObject | Add-Member -type NoteProperty -name "Update $kb n'est pas installee" -value "" -Force
        }
    }
 
    #Logiciels -Vérifie si logiciel existe depuis fichier txt externe- : 
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
    Write-Host "Logiciels sur la machine $name :"
 
    $apps = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object {![string]::IsNullOrWhiteSpace($_.DisplayName) } | Select-Object -ExpandProperty DisplayName -Unique
    foreach($logi in $srclogi) {
        If ($apps -contains $logi) {
            Write-Host "Le logiciel $logi est installé sur la machine $name"
            $myObject | Add-Member -type NoteProperty -name "Logiciel $logi installee" -value "" -Force
        } else {
            Write-Host "Le logiciel $logi n'est pas installé sur la machine $name"
            $myObject | Add-Member -type NoteProperty -name "Logiciel $logi n'est pas installee" -value "" -Force
        }    
    }
 
 
    #Services -Vérifie si services existe depuis fichier txt externe- :
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~" 
    Write-Host "Services sur la machine $name :"
 
    foreach($svc in $srcsvc){
    $mysvc = Get-Service -name $svc -ComputerName $name -ErrorAction 4
       if($mysvc -and $($mysvc.Status) -eq "Running") {
            write-host "- $svc est présent. Il est actuellement : En cours d'exécution"
            $myObject | Add-Member -type NoteProperty -name "Service $svc est present. Statut actuel : En cours" -value "" -Force
 
        } elseif ($mysvc -and $($mysvc.Status) -eq "Stopped") {
            write-host "- $svc est présent. Il est actuellement : Arrêté"
            $myObject | Add-Member -type NoteProperty -name "Service $svc est present. Statut actuel : Arrete" -value "" -Force
 
        } else {
            write-host "- $svc n'est pas présent."
            $myObject | Add-Member -type NoteProperty -name "Service $svc n'est pas present" -value "" -Force
        }
    }
 
    #Processus -Vérifie si processus existe depuis fichier txt externe- :
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
    Write-Host "Processus sur la machine $name :"
 
    foreach($proce in $srcproce){
        if(Get-Process -ProcessName $proce -ComputerName $name -ErrorAction 4) {
            write-host "- $proce est présent."
            $myObject | Add-Member -type NoteProperty -name "Processus $proce est present" -value "" -Force
        } else {
            write-host "- $proce n'est pas présent."
            $myObject | Add-Member -type NoteProperty -name "Processus $proce n'est pas present" -value "" -Force
        }
    }
 
    #Clé registre -Vérifie si clé registre existe depuis fichier txt externe- :
    write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
    write-host "Clé de registre sur la machine $name :"
 
    foreach ($reg in $srcreg){
    $regsplit = $reg.split(';')
    $pathsplit = $reg.split(';')[-2]
    $regsplittab = $regsplit.split(' ')[1]
    If(Get-ItemProperty -Path $pathsplit -name $regsplit  -ErrorAction 4) {
        write-host "- Clé" $regsplit.split(' ')[1] "présente dans ->" $pathsplit
        $myObject | Add-Member -type NoteProperty -name "Cle registre $regsplittab presente" -value "" -Force
        } else {
        write-host "- Clé" $regsplit.split(' ')[1] "non présente dans ->" $pathsplit
        $myObject | Add-Member -type NoteProperty -name "Cle registre $regsplittab non presente" -value "" -Force
        }
    }
 
##### Users déjà connectés sur poste + date last logon #####
write-host ""
write-host "//Users + last logon :\\"
write-host "Utilisateurs déjà connecté sur sur la machine $name et LastLogon :"
 
$pathusers = Get-ChildItem $srcusers | ? {$_.Name -ne "Public"} | ? {$_.Name -ne 'MSSQL$ADK.NT Service'} #Liste les dossiers présent dans "C:\Users\" en enlevant le dossier "Public" et "MSSQL$ADK.NT Service" # Le "?" correspond à la commande Where-Object
foreach($dir in $pathusers) {
    $nt = Get-Item ($dir.FullName + "\NTUSER.DAT") -Force
    $LastWriteTimeNTUSER = $nt.LastWriteTime.ToString("dd/MM/yyyy")
    $Nameuser = $dir.Name
    Write-Host "- $Nameuser : connecté pour la dernière fois le $LastWriteTimeNTUSER"
    $myObject | Add-Member -type NoteProperty -name "Users : $Nameuser" -value "" -Force
}
 
 
 
##### Export du tableau vers un fichier csv : #####
    $myObject | Export-Csv $rstcsv -Delimiter ";"   
    $myObject
 
##### Fin de la transcription dans le fichier de destination #####
Stop-Transcript

Il me permet de récupérer des informations sur l'ordinateur et les enregistre dans un fichier csv (aussi dans un fichier txt mais pas utile ici) pas très propre mais il m'a été demandé comme ça.

Donc il faudrait avec un autre script que tous les csv qui ont été créé soit injectés dans un seul et même csv.

En gros : Si j'ai 200 fichier csv qui ont été créé par mon script, il faudrait que le contenu des 200 fichiers soit mit dans un seul fichier csv pour faciliter la lecture et ne pas devoir les lire une par une.

Merci

Alexis