DeployCenter
This commit is contained in:
commit
7c724d475e
14 files changed
+2460
No files matched your search
@@ -0,0 +1,179 @@
|
||||
|
||||
# HardwareInfo.ps1
|
||||
# DeployCenter - Inventaire matériel
|
||||
# Compatible Windows PowerShell 5.1 / WinPE
|
||||
|
||||
function Get-HardwareInfo {
|
||||
[CmdletBinding()]
|
||||
param()
|
||||
|
||||
$info = [ordered]@{
|
||||
Manufacturer = "Inconnu"
|
||||
Model = "Inconnu"
|
||||
SerialNumber = "Inconnu"
|
||||
Firmware = "Inconnu"
|
||||
Architecture = $env:PROCESSOR_ARCHITECTURE
|
||||
WinPE = $false
|
||||
Disks = @()
|
||||
Errors = @()
|
||||
}
|
||||
|
||||
# Fabricant et modele du PC
|
||||
try {
|
||||
$computer = Get-CimInstance `
|
||||
-ClassName Win32_ComputerSystem `
|
||||
-ErrorAction Stop
|
||||
|
||||
if ($computer.Manufacturer) {
|
||||
$info.Manufacturer = $computer.Manufacturer.Trim()
|
||||
}
|
||||
|
||||
if ($computer.Model) {
|
||||
$info.Model = $computer.Model.Trim()
|
||||
}
|
||||
}
|
||||
catch {
|
||||
$info.Errors += "Modele du PC : $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Numero de serie
|
||||
try {
|
||||
$bios = Get-CimInstance `
|
||||
-ClassName Win32_BIOS `
|
||||
-ErrorAction Stop
|
||||
|
||||
if ($bios.SerialNumber) {
|
||||
$info.SerialNumber = $bios.SerialNumber.Trim()
|
||||
}
|
||||
}
|
||||
catch {
|
||||
$info.Errors += "Numero de serie : $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Detection du firmware
|
||||
try {
|
||||
$firmwareKey = Get-ItemProperty `
|
||||
-Path "HKLM:\SYSTEM\CurrentControlSet\Control" `
|
||||
-Name PEFirmwareType `
|
||||
-ErrorAction Stop
|
||||
|
||||
switch ([int]$firmwareKey.PEFirmwareType) {
|
||||
1 { $info.Firmware = "BIOS (Legacy)" }
|
||||
2 { $info.Firmware = "UEFI" }
|
||||
default { $info.Firmware = "Indetermine" }
|
||||
}
|
||||
}
|
||||
catch {
|
||||
$info.Errors += "Mode firmware indisponible"
|
||||
}
|
||||
|
||||
# Detection de WinPE
|
||||
$info.WinPE = Test-Path `
|
||||
"HKLM:\SYSTEM\CurrentControlSet\Control\MiniNT"
|
||||
|
||||
# Inventaire des disques physiques
|
||||
try {
|
||||
$disks = Get-CimInstance `
|
||||
-ClassName Win32_DiskDrive `
|
||||
-ErrorAction Stop
|
||||
|
||||
foreach ($disk in $disks) {
|
||||
$info.Disks += [PSCustomObject]@{
|
||||
Index = [int]$disk.Index
|
||||
Model = $disk.Model
|
||||
SizeBytes = [long]$disk.Size
|
||||
SizeGB = [math]::Round(
|
||||
([double]$disk.Size / 1GB), 1
|
||||
)
|
||||
InterfaceType = $disk.InterfaceType
|
||||
Status = $disk.Status
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
$info.Errors += "Inventaire des disques : $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Retourner un objet exploitable par les autres modules
|
||||
[PSCustomObject]$info
|
||||
}
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Execution du test
|
||||
# ============================================================
|
||||
|
||||
$LogDirectory = "X:\DeployLogs"
|
||||
$JsonPath = Join-Path $LogDirectory "hardware.json"
|
||||
$TextPath = Join-Path $LogDirectory "hardware.log"
|
||||
|
||||
try {
|
||||
New-Item -ItemType Directory `
|
||||
-Path $LogDirectory `
|
||||
-Force `
|
||||
-ErrorAction Stop | Out-Null
|
||||
}
|
||||
catch {
|
||||
throw "Impossible de creer le repertoire de logs : $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
$result = Get-HardwareInfo
|
||||
|
||||
# Export JSON en UTF-8 avec BOM sous Windows PowerShell 5.1
|
||||
try {
|
||||
$json = $result | ConvertTo-Json -Depth 5
|
||||
|
||||
Set-Content `
|
||||
-Path $JsonPath `
|
||||
-Value $json `
|
||||
-Encoding UTF8 `
|
||||
-ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
throw "Impossible d'enregistrer le JSON : $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Construire un journal texte sans utiliser Write-Host
|
||||
$lines = @(
|
||||
"=== DeployCenter - Inventaire materiel ==="
|
||||
"Date : $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
|
||||
"Fabricant : $($result.Manufacturer)"
|
||||
"Modele : $($result.Model)"
|
||||
"Numero serie : $($result.SerialNumber)"
|
||||
"Firmware : $($result.Firmware)"
|
||||
"Architecture : $($result.Architecture)"
|
||||
"WinPE : $($result.WinPE)"
|
||||
""
|
||||
"=== Disques detectes ==="
|
||||
)
|
||||
|
||||
foreach ($disk in $result.Disks) {
|
||||
$lines += (
|
||||
"Disque {0} : {1} - {2} Go - {3} - {4}" -f
|
||||
$disk.Index,
|
||||
$disk.Model,
|
||||
$disk.SizeGB,
|
||||
$disk.InterfaceType,
|
||||
$disk.Status
|
||||
)
|
||||
}
|
||||
|
||||
if ($result.Errors.Count -gt 0) {
|
||||
$lines += ""
|
||||
$lines += "=== Erreurs ==="
|
||||
|
||||
foreach ($message in $result.Errors) {
|
||||
$lines += $message
|
||||
}
|
||||
}
|
||||
|
||||
$utf8 = New-Object System.Text.UTF8Encoding($false)
|
||||
|
||||
[System.IO.File]::WriteAllLines(
|
||||
$TextPath,
|
||||
[string[]]$lines,
|
||||
$utf8
|
||||
)
|
||||
|
||||
# Renvoyer l'objet comme sortie principale du script
|
||||
$result
|
||||
Reference in new issue
Block a user