Collecte hardware.bat
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Type | Script PowerShell |
| Objet | Inventaire matériel d'une liste de serveurs distants |
| Dépendances | WMI, PSCredential |
| Voir aussi | Get-credential · Get-content |
Script parcourant une liste de serveurs (fichier texte), testant leur disponibilité par ping WMI, puis collectant les informations matérielles (fabricant, modèle, CPU, mémoire, disques) sur chaque machine joignable.
Préparation
Préparer le fichier listeserveurs.txt contenant, une ligne par serveur, les
informations de connexion au format IP,domaine\login,motdepasse (valeurs
fictives à adapter) :
IpMachine1,domaine\loginwindowsmachine1,pwdwindowsmachine1
IpMachine2,domaine\loginwindowsmachine2,pwdwindowsmachine2
⚠️ Stocker des mots de passe en clair dans un fichier est déconseillé. Préférer Get-credential ou un magasin sécurisé.
Script
# Etape 1 : Ping du serveur pour tester la disponibilité
# Etape 2 : Si Ping OK, récupération des infos : Fabricant, Modèle, CPU, Mémoire...
# Etape 3 : Affichage des infos dans la console
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
# Lire la liste des serveurs
$listserveurs = Get-Content "listeserveurs.txt"
foreach ($ligne in $listserveurs) {
# Séparer serveur / login / mot de passe
$decoupageligne = $ligne.Split(",")
$serveur = $decoupageligne[0]
$login = $decoupageligne[1]
$stringpwd = $decoupageligne[2]
$pwd = ConvertTo-SecureString $stringpwd -AsPlainText -Force
# Ping WMI du serveur courant
$resultatsPing = Get-WmiObject -Query "select StatusCode from Win32_PingStatus where Address = '$serveur'"
$reponse = $false
ForEach ($resultat in $resultatsPing) {
if ($resultatsPing.StatusCode -eq 0) { $reponse = $true }
}
if ($reponse) {
Write-Host -ForegroundColor "green" =========================================
Write-Host -ForegroundColor "green" Ping Serveur $serveur --> OK
Write-Host -ForegroundColor "green" =========================================
$credential = New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $login,$pwd -ErrorAction "SilentlyContinue"
# ComputerSystemInfo
Write-Host ---------------------------
Write-Host --> ComputerSystemInfo
Write-Host ---------------------------
$computersysteminfo = Get-WmiObject -Query "select * from Win32_ComputerSystem" `
-ComputerName $serveur -Credential $credential |
Select Name,Model,Manufacturer,Description,DNSHostName,Domain,DomainRole,`
PartOfDomain,NumberOfProcessors,SystemType,TotalPhysicalMemory,UserName,Workgroup
Write-Host Nom Serveur : $computersysteminfo.Name
Write-Host Model : $computersysteminfo.Model
Write-Host Domaine : $computersysteminfo.Domain
Write-Host Constructeur : $computersysteminfo.Manufacturer
Write-Host Type Architecture : $computersysteminfo.SystemType
$taillememoire = [math]::round([int]$computersysteminfo.TotalPhysicalMemory / (1024*1024*1024), 1)
Write-Host Mémoire Physique Totale : $taillememoire Go
# OperatingSystemInfo
Write-Host ---------------------------
Write-Host --> OperatingSystemInfo
Write-Host ---------------------------
$operatingsysteminfo = Get-WmiObject Win32_OperatingSystem -ComputerName $serveur -Credential $credential
Write-Host OS : $operatingsysteminfo.Caption
# Infos disque
Write-Host ---------------------------
Write-Host --> Disques Info
Write-Host ---------------------------
$Disques = Get-WmiObject Win32_LogicalDisk -ComputerName $serveur -Credential $credential |
Where { $_.Name -ne "A:" -and $_.DriveType -eq "3" }
foreach ($disque in $Disques) {
$espacelibre = [math]::round($disque.FreeSpace / (1024*1024*1024), 1)
$tailletotaledisque = [math]::round($disque.Size / (1024*1024*1024), 1)
Write-Host Disque $disque.Name Taille totale = $tailletotaledisque Go Espace libre = $espacelibre Go
}
# Info processeur
Write-Host ---------------------------
Write-Host --> Processeur Info
Write-Host ---------------------------
$processor = Get-WmiObject Win32_Processor -ComputerName $serveur -Credential $credential
foreach ($proc in $processor) {
Write-Host "ID: " $proc.DeviceID "Processeur : " $proc.Name ", Fréquence :" $proc.CurrentClockSpeed "MHz Architecture : " -NoNewline
Switch ($proc.Architecture) {
0 { "x86" }
1 { "MIPS" }
2 { "Alpha" }
3 { "PowerPC" }
6 { "Intel Itanium IPF" }
9 { "x64" }
}
}
}
else {
Write-Host -ForegroundColor "red" Ping Serveur $serveur --> KO
}
}