Server List with Memory and Paging Size

Profile picture

Human

Задан список серверов, имена у них от server-06 до server-18, нужно получить через powershell список, где в первом столбце имя сервера, во втором объём оперативной памяти, в третьем максимальный размер файла подкачки. Поля разделяются табуляцией.

gpt-3.5-turbo

Вы можете использовать следующий скрипт PowerShell для получения списка серверов с их объемом оперативной памяти и максимальным размером файла подкачки:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

foreach ($serverName in $serverNames) {
    $memory = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $serverName | Select-Object -ExpandProperty TotalPhysicalMemory
    $pageFile = Get-WmiObject -Class Win32_PageFileSetting -ComputerName $serverName | Select-Object -ExpandProperty InitialSize

    Write-Output "$serverName`t$memory`t$pageFile"
}
Этот скрипт использует команду Get-WmiObject для получения информации о серверах. Он выполняет цикл по каждому имени сервера из списка $serverNames, получает объем оперативной памяти с помощью Win32_ComputerSystem и максимальный размер файла подкачки с помощью Win32_PageFileSetting. Затем он выводит результат в формате "имя сервера\tобъем оперативной памяти\tмаксимальный размер файла подкачки".

GPT-3.5

Profile picture

Human

то же самое, но через invoke-command

gpt-3.5-turbo

Если вы хотите использовать Invoke-Command для выполнения команды на удаленных серверах, вам потребуется настроить доступ к удаленному выполнению команд PowerShell на каждом сервере. Вот пример скрипта, который использует Invoke-Command для получения информации о серверах:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $pageFile = Get-WmiObject -Class Win32_PageFileSetting | Select-Object -ExpandProperty InitialSize

    Write-Output "$env:COMPUTERNAME`t$memory`t$pageFile"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом скрипте мы создаем блок скрипта $scriptBlock, который содержит те же команды Get-WmiObject, что и в предыдущем примере. Затем мы используем Invoke-Command, чтобы выполнить этот блок скрипта на каждом сервере из списка $serverNames. Результаты сохраняются в переменную $result, которую мы выводим с помощью цикла ForEach-Object.

GPT-3.5

Profile picture

Human

выводимые значения должны быть в гигабайтах, округлены до 1 знака после запятой

gpt-3.5-turbo

Измените соответствующую часть скрипта, чтобы объем оперативной памяти и максимальный размер файла подкачки были выведены в гигабайтах и округлены до одного знака после запятой:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileSetting | Select-Object -ExpandProperty InitialSize
    $pageFileGB = [math]::Round($pageFile / 1GB, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы добавили две новые переменные: $memoryGB и $pageFileGB. Мы разделили значения $memory и $pageFile на 1 гигабайт (1GB) и округлили результат до одного знака после запятой с помощью [math]::Round(). Затем мы выводим результаты с использованием обновленных переменных $memoryGB и $pageFileGB.

GPT-3.5

Profile picture

Human

Разве параметр InitialSize показывает максимальный размер файла подкачки? Это начальный, и он везде возвращает 0

gpt-3.5-turbo

Вы правы, параметр InitialSize возвращает начальный размер файла подкачки, а не максимальный размер. Чтобы получить максимальный размер файла подкачки, вам нужно использовать параметр MaximumSize вместо InitialSize. Вот обновленный скрипт, который использует MaximumSize для получения максимального размера файла подкачки:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileSetting | Select-Object -ExpandProperty MaximumSize
    $pageFileGB = [math]::Round($pageFile / 1GB, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы заменили InitialSize на MaximumSize при получении информации о файле подкачки с помощью Get-WmiObject. Теперь скрипт должен правильно выводить максимальный размер файла подкачки для каждого сервера.

GPT-3.5

Profile picture

Human

Похоже, для windows 2008 r2 команда Get-WmiObject -Class Win32_PageFileSetting не возвращает корректных значений

gpt-3.5-turbo

Да, вы правы. На Windows Server 2008 R2 команда Get-WmiObject -Class Win32_PageFileSetting может не возвращать корректные значения для максимального размера файла подкачки. Вместо этого, вы можете использовать команду Get-WmiObject -Class Win32_PageFileUsage для получения информации о файле подкачки. Вот обновленный скрипт, который использует эту команду:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
    $pageFileGB = [math]::Round($pageFile / 1GB, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы заменили Win32_PageFileSetting на Win32_PageFileUsage для получения информации о файле подкачки. Мы используем свойство AllocatedBaseSize, которое предоставляет размер файла подкачки в байтах. Затем мы преобразуем его в гигабайты и округляем до одного знака после запятой. Теперь скрипт должен правильно выводить максимальный размер файла подкачки для каждого сервера, включая Windows Server 2008 R2.

GPT-3.5

Profile picture

Human

$pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize выводит уже в мегабайтах, и последующее округление до гигабайт, похоже, неправильно

gpt-3.5-turbo

Приношу извинения за путаницу. Вы правы, свойство AllocatedBaseSize возвращает размер файла подкачки в килобайтах, а не в мегабайтах. В этом случае, для получения размера файла подкачки в гигабайтах, вам нужно разделить значение на 1 миллион (1 048 576) вместо 1 гигабайта (1 073 741 824). Вот обновленный скрипт:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
    $pageFileGB = [math]::Round($pageFile / 1MB / 1024, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы разделили значение $pageFile на 1 мегабайт (1MB) и затем на 1024, чтобы получить размер файла подкачки в гигабайтах. Затем мы округлили результат до одного знака после запятой. Теперь скрипт должен правильно выводить максимальный размер файла подкачки в гигабайтах для каждого сервера.

GPT-3.5

Profile picture

Human

Нет, именно в мегабайтах выводится в $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize

gpt-3.5-turbo

Приношу извинения за путаницу. Вы правы, свойство AllocatedBaseSize возвращает размер файла подкачки в килобайтах, а не в мегабайтах. В этом случае, для получения размера файла подкачки в гигабайтах, вам нужно разделить значение на 1 024 (1 мегабайт) и затем на 1 024 еще раз (1 гигабайт). Вот обновленный скрипт:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
    $pageFileGB = [math]::Round($pageFile / 1MB / 1024 / 1024, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы разделили значение $pageFile на 1 мегабайт (1MB), затем на 1 024 (1 гигабайт) и еще раз на 1 024, чтобы получить размер файла подкачки в гигабайтах. Затем мы округлили результат до одного знака после запятой. Теперь скрипт должен правильно выводить максимальный размер файла подкачки в гигабайтах для каждого сервера.

GPT-3.5

Profile picture

Human

свойство AllocatedBaseSize возвращает размер файла подкачки НЕ в килобайтах, а в мегабайтах!

gpt-3.5-turbo

Приношу извинения за путаницу. Вы правы, свойство AllocatedBaseSize возвращает размер файла подкачки в мегабайтах, а не в килобайтах. В этом случае, для получения размера файла подкачки в гигабайтах, вам нужно разделить значение на 1 024 (1 гигабайт). Вот обновленный скрипт:

powershell

Copy

$serverNames = @("server-06", "server-07", "server-08", "server-09", "server-10", "server-11", "server-12", "server-13", "server-14", "server-15", "server-16", "server-17", "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
    $pageFileGB = [math]::Round($pageFile / 1GB, 1)

    Write-Output "$env:COMPUTERNAME`t$memoryGB`t$pageFileGB"
}

$result = Invoke-Command -ComputerName $serverNames -ScriptBlock $scriptBlock

$result | ForEach-Object {
    Write-Output $_
}
В этом обновленном скрипте мы разделили значение $pageFile на 1 гигабайт (1GB), чтобы получить размер файла подкачки в гигабайтах. Затем мы округлили результат до одного знака после запятой. Теперь скрипт должен правильно выводить максимальный размер файла подкачки в гигабайтах для каждого сервера.

GPT-3.5

Profile picture

Human

деление на 1024 и деление на 1GB - совсем разные вещи, и твоя фраза "нужно разделить значение на 1 024 (1 гигабайт). " ошибочна!

gpt-3.5-turbo

Приношу извинения за путаницу. Вы абсолютно правы, и я извиняюсь за неправильную информацию. Для преобразования размера файла подкачки из мегабайт в гигабайты, вам нужно разделить значение на 1024 (1 гигабайт равен 1024 мегабайтам). Вот обновленный скрипт:

powershell

Copy

$serverNames = ... "server-18")

$scriptBlock = {
    $memory = Get-WmiObject -Class Win32_ComputerSystem | Select-Object -ExpandProperty TotalPhysicalMemory
    $memoryGB = [math]::Round($memory / 1GB, 1)

    $pageFile = ... Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
    $pageFileGB = [math]::Round($pageFile / 1024, 1)

    Write-Output ... мы разделили значение `$pageFile` на 1024, чтобы получить размер файла подкачки в гигабайтах. Затем мы округлили результат до одного знака после запятой. Теперь скрипт должен правильно выводить максимальный размер файла подкачки в гигабайтах для каждого сервера.

GPT-3.5

Profile picture

Human

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

gpt-3.5-turbo

Вот обновленный скрипт PowerShell, который добавляет количество занятой оперативной памяти в процентах к выводу:

powershell

Copy

$serverNames = @("server-06", ... цикл по каждому имени сервера из списка `$serverNames`, получает объем оперативной памяти с помощью `Win32_ComputerSystem`, занятую оперативную память с помощью `Win32_PerfFormattedData_PerfOS_Memory` и максимальный размер файла подкачки с помощью `Win32_PageFileSetting`.

foreach ($server in $serverNames) {
    $computerSystem = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $server
    $memory = [math]::Round($computerSystem.TotalPhysicalMemory / 1GB, 2)

    $pageFile = Get-WmiObject -Class Win32_PageFileSetting -ComputerName $server
    $pageFileSize = [math]::Round($pageFile.AllocatedBaseSize / 1GB, 2)

    $memoryUsage = Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory -ComputerName $server | Select-Object -ExpandProperty PercentCommittedBytesInUse

    Write-Output "$server`t$memory GB`t$pageFileSize GB`t$memoryUsage%"
}
Этот скрипт будет выводить список серверов с их объемом оперативной памяти, максимальным размером файла подкачки и процентом занятой оперативной памяти.

GPT-3.5

Profile picture

Human

Похоже, что PercentCommittedBytesInUse выдаёт процент с учётом доступного объёма в файле подкачки, а нужно чтобы получалась та же цифра, которая отображается в диспетчере задач на вкладке performance

gpt-3.5-turbo

Привет, Алексей! Как я могу помочь вам с диспетчером задач на вкладке Performance?

GPT-3.5

Profile picture

Human

посмотри предыдущие сообщения в диалоге, я всё ещё продолжаю его

gpt-3.5-turbo

Конечно, Алексей, я могу просмотреть предыдущие сообщения в нашем диалоге. Что именно вам нужно?

GPT-3.5

Profile picture

Human

как получить из wmi процент использованной оперативной памяти, чтобы получалась та же цифра, которая отображается в диспетчере задач на вкладке performance

gpt-3.5-turbo

Для получения процента использования оперативной памяти, аналогичного значению, отображаемому в диспетчере задач на вкладке Performance, вы можете использовать следующий скрипт PowerShell:

powershell

Copy

$memoryUsage = Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory | Select-Object -ExpandProperty PercentCommittedBytesInUse
Этот скрипт использует WMI (Windows Management Instrumentation) для получения процента использования оперативной памяти. Значение PercentCommittedBytesInUse соответствует проценту использования оперативной памяти, отображаемому в диспетчере задач на вкладке Performance.

GPT-3.5

Profile picture

Human

только что проверил - это не та цифра

gpt-3.5-turbo

Извините за путаницу. Если вам нужно получить ту же цифру, которая отображается в диспетчере задач, вы можете использовать следующий код:

powershell

Copy

$wmi = Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory | Select-Object -ExpandProperty PercentCommittedBytesInUse
$percentCommittedBytesInUse = [math]::Round($wmi, 1)
Этот код использует WMI для получения процента использования выделенных байтов памяти. Затем он округляет полученное значение до одной десятой.

GPT-3.5

Profile picture

Human

PercentCommittedBytesInUse это не то свойство, которое нужно

gpt-3.5-turbo

Понимаю, извините за путаницу. Если вам нужно получить использование оперативной памяти, которое отображается в диспетчере задач, вы можете использовать следующий код:

powershell

Copy

$memoryUsage = Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty FreePhysicalMemory
$memoryUsageGB = [math]::Round($memoryUsage / 1GB, 1)
Этот код использует WMI для получения свойства FreePhysicalMemory, которое представляет доступную оперативную память в байтах. Затем мы делим это значение на 1GB, чтобы получить использование оперативной памяти в гигабайтах, и округляем результат до одного знака после запятой.

GPT-3.5

Profile picture

Human

А как узнать, сколько используется в файле подкачки?

gpt-3.5-turbo

Вы можете использовать команду Get-Counter в PowerShell для получения информации о использовании файла подкачки. Вот пример скрипта, который позволяет получить процент использования файла подкачки:

powershell

Copy

$counterName = '\Paging File(_Total)\% Usage'
$counter = Get-Counter -Counter $counterName

$usagePercentage = $counter.CounterSamples.CookedValue

Write-Output "Процент использования файла подкачки: $usagePercentage%"
В этом скрипте мы используем $counterName для указания имени счетчика, который отслеживает процент использования файла подкачки. Затем мы используем Get-Counter для получения информации о счетчике. Мы извлекаем значение CookedValue из результатов и выводим его в консоль.
Обратите внимание, что для выполнения этого скрипта вам может потребоваться запустить PowerShell с правами администратора.

GPT-3.5

Profile picture

Human

как это получить из wmi?

gpt-3.5-turbo

Для получения информации о доступной оперативной памяти с использованием WMI в PowerShell, вы можете использовать следующий код:

powershell

Copy

$memoryUsage = Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty FreePhysicalMemory
$memoryUsageGB = [math]::Round($memoryUsage / 1GB, 1)
Этот код использует WMI класс Win32_OperatingSystem для получения информации о доступной оперативной памяти. Мы выбираем свойство FreePhysicalMemory, которое представляет количество свободной оперативной памяти в байтах. Затем мы делим это значение на 1GB, чтобы получить использование оперативной памяти в гигабайтах.

GPT-3.5

Profile picture

Human

как узнать, сколько используется в файле подкачки с ипользованием информации из wmi?

gpt-3.5-turbo

Для получения информации о размере и использовании файла подкачки с использованием WMI в PowerShell, вы можете использовать следующий код:

powershell

Copy

$wmi = Get-WmiObject -Class Win32_PageFileUsage
$pageSize = Get-WmiObject -Class Win32_PageFileSetting | Select-Object -ExpandProperty InitialSize
$pageUsage = $wmi | Measure-Object -Property AllocatedBaseSize -Sum | Select-Object -ExpandProperty Sum

$pageSizeGB = [math]::Round($pageSize / 1GB, 1)
$pageUsageGB = [math]::Round($pageUsage / 1GB, 1)

Write-Output "Размер файла подкачки: $pageSizeGB GB"
Write-Output "Использование файла подкачки: $pageUsageGB GB"
В этом коде мы используем WMI классы Win32_PageFileUsage и Win32_PageFileSetting для получения информации о размере и использовании файла подкачки. Мы сохраняем размер файла подкачки в переменную $pageSize и использование файла подкачки в переменную $pageUsage. Затем мы округляем эти значения до гигабайт и выводим результаты.

GPT-3.5

Profile picture

Human

Непонятно, зачем вот эта строка: $pageUsage = $wmi | Measure-Object -Property AllocatedBaseSize -Sum | Select-Object -ExpandProperty Sum всё должно как-то проще быть

gpt-3.5-turbo

Приношу извинения за путаницу. Вы правы, можно упростить код. Вот обновленный вариант:

powershell

Copy

$pageFile = Get-WmiObject -Class Win32_PageFileUsage
$pageUsage = $pageFile | Select-Object -Property AllocatedBaseSize | Measure-Object -Property AllocatedBaseSize -Sum | Select-Object -ExpandProperty Sum

$pageUsageGB = [math]::Round($pageUsage / 1GB, 1)

Write-Output "Использование файла подкачки: $pageUsageGB GB"
В этом коде мы используем WMI класс Win32_PageFileUsage для получения информации о размере и использовании файла подкачки. Мы сохраняем использование файла подкачки в переменную $pageUsage путем извлечения свойства AllocatedBaseSize и затем суммируем его с помощью Measure-Object. Затем мы округляем это значение до гигабайт и выводим результат.

GPT-3.5

Profile picture

Human

А как без Measure-Object

gpt-3.5-turbo

Если вы хотите получить только суммарное использование файла подкачки без использования Measure-Object, вы можете воспользоваться следующим скриптом:

powershell

Copy

$counter = Get-Counter -Counter "\Paging File(_Total)\% Usage"
$pageUsage = $counter.CounterSamples[0].CookedValue
$pageUsage
Этот скрипт использует команду Get-Counter для получения информации о процентном использовании файла подкачки. Затем мы извлекаем значение CookedValue из первого элемента CounterSamples, который представляет собой образец использования файла подкачки. Результат будет представлять собой процентное значение использования файла подкачки.

GPT-3.5

Profile picture

Human

в каких единицах измерения получается результат?

gpt-3.5-turbo

Результат будет представлен в процентах (%).

GPT-3.5

Share

Continue chat