Servers - Сбор характеристик серверов

Реклама:
Записка от 21.11.2011

Недавно понадобилось собрать информацию о характеристиках серверов в удаленных сайтах, а так как серверов несколько десятков, то потребовалась некоторая автоматизация процесса сбора данных. Для сбора данных с группы серверов я использовал скрипт PowerShell, который представлен ниже.

# Функция сбора параметров с сервера
Function GetComputerInfo ($ComputerName)
{
    $ComputerProperties = New-Object System.Object
    $ComputerProperties | add-member -membertype noteproperty -name Name -Value $ComputerName
    
    $P = Get-WmiObject -class "Win32_ComputerSystem" -computername $ComputerName | `
      Select Model, @{Label="TotalPhysicalMemory";Expression={[Math]::Round($_.TotalPhysicalMemory `
      / 1024 / 1024 / 1024)}}
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name Model -Value $Null
    $ComputerProperties.Model = $P.Model
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name RAMSize -Value $Null
    $ComputerProperties.RAMSize = $P.TotalPhysicalMemory
    
    $P = Get-WmiObject -class "Win32_SystemEnclosure" -computername $ComputerName | select SerialNumber
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name SerialNumber -Value $Null
    $ComputerProperties.SerialNumber = $P.SerialNumber    
    
    $P = Test-Connection -ComputerName $ComputerName -Count 1 | select IPV4Address
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name IPV4Address -Value $Null
    $ComputerProperties.IPV4Address = $P.IPV4Address  

    $P = Get-WmiObject -class "Win32_Processor" -computername $ComputerName | `
      Select Name, CurrentClockSpeed
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name CPUName -Value $Null
    $ComputerProperties.CPUName = $P[0].Name
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name CPUCores -Value $Null
    $ComputerProperties.CPUCores = ($P | Measure-Object).Count
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name CPUClockSpeed -Value $Null
    $ComputerProperties.CPUClockSpeed = $P[0].CurrentClockSpeed

    $P = Get-WmiObject -class "Win32_DiskDrive" -computername $ComputerName | `
      Select @{Label="HDDModel";Expression={$_.Model}}, `
      @{Label="HDDInterfaceType";Expression={$_.InterfaceType}}, `
      @{Label="HDDSize";Expression={[Math]::Round($_.Size / 1024 / 1024 / 1024)}}, `
      @{Label="HDDPartitions";Expression={$_.Partitions}}
    $ComputerProperties | Add-Member -MemberType NoteProperty -Name HDD -Value $Null
    $ComputerProperties.HDD = $P

    $ComputerProperties
}

# Тело скрипта
$ErrorActionPreference = "Continue"
$Servers = Import-Csv Servers.csv
$Servers | Sort name | Where-Object {Test-Connection -Count 2 -ComputerName $_.Name `
  -ErrorAction SilentlyContinue} | ForEach-Object { GetComputerInfo $_.name }

Этот скрипт использует в качестве входных данных файл CSV, в котором перечислены имена серверов, с которых требуется собрать данные.

Листинг файла Servers.csv:

Name
Server1
Server2
Server3
Server4

На выходе скрипта получается список табличек по каждому серверу, в которых указаны следующие параметры: имя сервера, модель сервера, размер ОЗУ в ГБ, серийный номер сервера, IP адрес сервера, тип процессора, количество ядер процессора, такторая частота процессора, информация по жестким дискам.

Например:

Name          : Server1
Model         : ProLiant ML370 G4
RAMSize       : 2
SerialNumber  : GB850964TF      
IPV4Address   : 172.31.17.1
CPUName       : Intel(R) Xeon(TM) CPU 3.60GHz
CPUCores      : 2
CPUClockSpeed : 3600
HDD           : {@{HDDModel=HP LOGICAL VOLUME SCSI Disk Device; HDDInterfaceType=SCSI; 
                 HDDSize=34; HDDPartitions=4}, @{HDDModel=HP LOGICAL VOLUME SCSI Disk 
                 Device; HDDInterfaceType=SCSI; HDDSize=203; HDDPartitions=1}}
Вверх