2017-03-29 3 views
1

Je dois inventorier la RAM des ordinateurs répertoriés dans un fichier texte. J'ai ce script:Comment puis-je utiliser PowerShell pour obtenir les détails RAM/mémoire de plusieurs ordinateurs?

$($servers = Get-Content D:\123.txt 

Foreach ($s in $servers) { 
    $s 
    get-wmiobject Win32_Processor -ComputerName $s -ErrorAction SilentlyContinue| select Name | Format-List 
    Get-WmiObject win32_baseboard -ComputerName $s -ErrorAction SilentlyContinue| Select product | Format-List 

    $colRAM = Get-WmiObject -Class "win32_PhysicalMemory" -namespace "root\CIMV2" -computerName $s 

    $colRAM | ForEach { 
      “Memory Installed: ” + $_.DeviceLocator 
      “Memory Size: ” + ($_.Capacity/1GB) + ” GB”  
      $SlotsFilled = $SlotsFilled + 1 
      $TotMemPopulated = $TotMemPopulated + ($_.Capacity/1GB) 
    } 

    Write-Host "_____________________________________ " 
}) *>&1 > output.txt 

qui renvoie ce résultat:

ordinateur1

Nom: Intel (R) Core (TM) 2 Duo CPU E8500 @ 3.16GHz

produit : DG31PR

Mémoire installée: J6H2 Taille de la mémoire: 1 Go

Je voudrais que le résultat soit comme celui-ci et exporté au format CSV:

Name  TotalRam  Type  Motherboard 
comp1  2gb   ddr3  h81m-k 
comp2  2gb   ddr3  h81m-k 
      2gb 
comp3  1gb   ddr2  DG31PR 
      0,5gb 

Répondre

1

Ceci est une version modifiée de votre script pour obtenir le résultat que vous avez demandé.

#For more types https://msdn.microsoft.com/en-us/library/aa394347(v=vs.85).aspx 
$memtype = @{ 
    0 = 'Unknown' 
    1 = 'Other' 
    2 = 'DRAM' 
    20 = 'DDR' 
    21 = 'DDR-2' 
    22= 'DDR2 FB-DIMM' 
    24 = 'DDR3' 
    25 = 'FBD2' 
} 

$Result = @() 

$servers = Get-Content D:\123.txt 


Foreach ($s in $servers) { 

    $Motherboard = (Get-WmiObject win32_baseboard -ComputerName $s -ErrorAction SilentlyContinue).product 
    $colRAM = Get-WmiObject -Class "win32_PhysicalMemory" -namespace "root\CIMV2" -computerName $s 

    $TotMemPopulated = 0 
    $SlotsFilled = 0 

    $colRAM | ForEach-Object { 
     $SlotsFilled = $SlotsFilled + 1 
     $TotMemPopulated = $TotMemPopulated + ($_.Capacity/1GB) 

     $Props =[ordered]@{   
      Name = $s 
      TotalRam = "$TotMemPopulated`gb" 
      Type = $memtype[[int]$_.MemoryType] 
      MotherBoard = $Motherboard 
     } 
     $Object = New-Object -TypeName PSCustomObject -Property $Props 

    } 

    $Result += $Object 
} 

$Result | Export-CSV RamReport.csv 

Explication:

$memtype est un Hashtable qui convertit le nombre MemoryType numérique de la classe WMI win32_PhysicalMemory au nom convivial. Vous devrez peut-être ajouter plus de références à cette hashtable en fonction de la variété de RAM dans votre environnement (j'ai fourni un lien vers les références de code numériques).

$result est défini comme un tableau vide, qui est utilisé pendant le script pour assembler les résultats dans un objet.

Le script crée un objet en tant que $object avec une hachage des propriétés que vous souhaitez assembler, puis ajoute chaque objet à la collection $ result. Ceci est une table de hachage ordonnée afin que nous respections l'ordre des colonnes que vous avez demandé dans la sortie finale.

Enfin nous exportons $result au format CSV en utilisant Export-CSV.

+0

fonctionne très bien! mais pouvons-nous définir la quantité de bélier, par exemple 2x1gb? – Damir

+0

Vous pourriez ajouter ceci à $ props: 'NumberOfDimms = $ colRAM.Count' qui vous donnerait le nombre de dimms, mais il ne vous dira pas la taille exacte de ceux-ci. Pour être sûr de cela (car ils pourraient être incompatibles), vous devez enregistrer la taille de chaque dimm individuellement. –

+0

merci! fonctionne très bien! – Damir