Bonjour,
J'ai actuellement un script qui enregistre dans un fichier txt externe et dans un tableau en csv des informations sur une machine.
Voici le code :
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 #################################################################### ##### 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 = "C:\Users\Administrateur.SRV2012R2\Desktop\Bricy\script\Powershell\Exo_05-04-17" $date = Get-Date -format "yyyy-MM-dd" $name = $env:COMPUTERNAME $rstname = "$dir\$date.$name.txt" $rstcsv = "$dir\$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\" ##### 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") { $totale = [Math]::round($volume.size /1024/1024/1024,1) $libre = [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 -Value "$nbproc" $myObject | Add-Member -type NoteProperty -name cadproc -Value "$cadproc GHz" #RAM $myObject | Add-Member -type NoteProperty -name RAMtotale -Value "$ramtotale Go" $myObject | Add-Member -type NoteProperty -name RAMutil -Value "$ramutil Go" #Disque Dur $myObject | Add-Member -type NoteProperty -name nbDD -Value "$nbddcount" $myObject | Add-Member -type NoteProperty -name DDTotale -Value "$totale Go" $myObject | Add-Member -type NoteProperty -name DDlibre -Value "$libre Go" ##### /////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" -value "installee" -Force } else { write-host "- $kb n'est pas installée." $myObject | Add-Member -type NoteProperty -name "Update $kb" -value "n'est pas installee" -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" } else { Write-Host "Le logiciel $logi n'est pas installé sur la machine $name" } } #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" -value "est present. Statut actuel : En cours" -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" -value "est present. Statut actuel : Arrete" -Force } else { write-host "- $svc n'est pas présent." $myObject | Add-Member -type NoteProperty -name "Service $svc" -value "n'est pas present" -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" -value "est present" -Force } else { write-host "- $proce n'est pas présent." $myObject | Add-Member -type NoteProperty -name "Processus $proce" -value "n'est pas present" -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" -value "presente" -Force } else { write-host "- Clé" $regsplit.split(' ')[1] "non présente dans ->" $pathsplit $myObject | Add-Member -type NoteProperty -name "Cle registre $regsplittab" -value "non presente" -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" } ##### Export du tableau vers un fichier csv : ##### $myObject | Export-Csv $rstcsv -Delimiter ";" $myObject ##### Fin de la transcription dans le fichier de destination ##### Stop-Transcript
Du coup j'aimerais savoir si il est possible d'extraire les informations qui sont dans les fichiers résultat (txt et csv) dans une base de donnée SQL.
Je n'ai jamais touché de base SQL mais il parait que c'est plutôt simple ^^'
Merci
Alexis
Partager