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 |
Partager