Всем привет! Это мой первый пост и в нём я хотел бы поделиться скриптом на PowerShell, который написал для получения информации о Windows серверах, а именно: имени сервера, количества ядер в нём, объёме дисков и свободного пространства на них, ОЗУ и модели сервера. Бывает что данная информация нужна для тех или иных целей и данный скрипт поможет получить её быстро и легко.
Скрипт протестировал в обычной оболочке PowerShell на Windows Server 2016 и Windows Server 2019, выдаёт ровную таблицу, которую легко можно скопировать в Excel и разбить по столбцам для удобной фильтрации по нужным параметрам. Единственное нужно убрать из скрипта добавление фразы "Гб", так как иначе Excel не сможет фильтровать по числам. В приведённом здесь варианте убирать не стал, так красивее выглядит вывод в оболочке PowerShell :) Так же хотелось бы добавить что в PowerShell ISE имеются смещения, видимо чистая оболочка PowerShell и оболочка PowerShell ISE по разному считают после какого количества символов нужно вставлять горизонтальную табуляцию.
Так же данный скпипт можно запускать на любом компьютере в домене в оболочке PowerShell от имени администратора домена, при этом нужно чтобы на серверах была включена служба WinRM, иначе "достучаться" до данных серверов не получится и скпирт пропустит такие сервера, не выведя о них информацию.

Собственно сам скрипт:
$servers = @(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -Properties Name | select -ExpandProperty Name)
"Name server:" + "`t" + "Count cores:" + "`t" + "Drive letter:" + "`t" + "HDD:" + "`t" + "`t" + "Free HDD:" + "`t" + "RAM:" + "`t" + "Model:"
foreach ($server in $servers) {
$NumberOfCores = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_Processor).NumberOfCores } -computername $server -ErrorAction Ignore
$DeviceID = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).DeviceID } -computername $server -ErrorAction Ignore
$FreeSpace = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).FreeSpace } -computername $server -ErrorAction Ignore
$Size = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_LogicalDisk).Size } -computername $server -ErrorAction Ignore
$PhysicalMemory = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_PhysicalMemory).Capacity } -computername $server -ErrorAction Ignor
$Model = Invoke-Command -ScriptBlock { (Get-CimInstance -ClassName Win32_computersystem).Model } -computername $server -ErrorAction Ignor
$Cores = 0
foreach ($Core in $NumberOfCores) {
$Cores = $Cores + $Core
}
$Count = 0
if ($DeviceID -ne $null) {
if ($DeviceID[1] -ne ":") {
$memorys = 0
foreach ($memory in $PhysicalMemory) {
$memorys = $memorys + $memory
}
while ($Count -ne $DeviceID.Length) {
if ($FreeSpace[$Count] -ne $null) {
if ($server.Length -le 7) {
[string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0)
[string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0)
[string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0)
if ($NSize.Length -le 4) {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
} else {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
}
} else {
[string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0)
[string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0)
[string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0)
if ($NSize.Length -le 4) {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
} else {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
}
}
}
$Count++
}
} else {
$memorys = 0
foreach ($memory in $PhysicalMemory) {
$memorys = $memorys + $memory
}
while ($Count -ne $DeviceID.Length-1) {
if ($server.Length -le 7) {
[string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0)
[string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0)
[string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0)
if ($NSize.Length -le 4) {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
} else {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
}
} else {
[string]$NSize = [math]::Round(($Size[$Count]/1024/1024/1024), 0)
[string]$NFreeSpace = [math]::Round(($FreeSpace[$Count]/1024/1024/1024), 0)
[string]$Nmemorys = [math]::Round(($memorys/1024/1024/1024), 0)
if ($NSize.Length -le 4) {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
} else {
if ($NFreeSpace.Length -le 4) {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
} else {
$server + "`t" + $Cores + "`t" + "`t" + $DeviceID[$Count] + "`t" + "`t" + $NSize + " Гб" + "`t" + $NFreeSpace + " Гб" + "`t" + $Nmemorys + " Гб" + "`t" + $Model
}
}
}
$Count++
}
}
}
}