Server List with Memory and Paging Size

Human
Задан список серверов, имена у них от server-06 до server-18, нужно получить через powershell список, где в первом столбце имя сервера, во втором объём оперативной памяти, в третьем максимальный размер файла подкачки. Поля разделяются табуляцией.
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")
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"
}
GPT-3.5

Human
то же самое, но через invoke-command
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
$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 $_
}
GPT-3.5

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 $_
}
GPT-3.5

Human
Разве параметр InitialSize показывает максимальный размер файла подкачки? Это начальный, и он везде возвращает 0
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 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 $_
}
GPT-3.5

Human
Похоже, для windows 2008 r2 команда Get-WmiObject -Class Win32_PageFileSetting не возвращает корректных значений
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_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 $_
}
GPT-3.5

Human
$pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize выводит уже в мегабайтах, и последующее округление до гигабайт, похоже, неправильно
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_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 $_
}
GPT-3.5

Human
Нет, именно в мегабайтах выводится в $pageFile = Get-WmiObject -Class Win32_PageFileUsage | Select-Object -ExpandProperty AllocatedBaseSize
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_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 $_
}
GPT-3.5

Human
свойство AllocatedBaseSize возвращает размер файла подкачки НЕ в килобайтах, а в мегабайтах!
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_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 $_
}
GPT-3.5

Human
деление на 1024 и деление на 1GB - совсем разные вещи, и твоя фраза "нужно разделить значение на 1 024 (1 гигабайт). " ошибочна!
gpt-3.5-turbo
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

Human
Теперь добавь к выводу количество занятой оперативной памяти, в процентах
gpt-3.5-turbo
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

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

Human
посмотри предыдущие сообщения в диалоге, я всё ещё продолжаю его
gpt-3.5-turbo
GPT-3.5

Human
как получить из wmi процент использованной оперативной памяти, чтобы получалась та же цифра, которая отображается в диспетчере задач на вкладке performance
gpt-3.5-turbo
powershell
Copy
$memoryUsage = Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory | Select-Object -ExpandProperty PercentCommittedBytesInUse
GPT-3.5

Human
только что проверил - это не та цифра
gpt-3.5-turbo
powershell
Copy
$wmi = Get-WmiObject -Class Win32_PerfFormattedData_PerfOS_Memory | Select-Object -ExpandProperty PercentCommittedBytesInUse
$percentCommittedBytesInUse = [math]::Round($wmi, 1)
GPT-3.5

Human
PercentCommittedBytesInUse это не то свойство, которое нужно
gpt-3.5-turbo
powershell
Copy
$memoryUsage = Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty FreePhysicalMemory
$memoryUsageGB = [math]::Round($memoryUsage / 1GB, 1)
GPT-3.5

Human
А как узнать, сколько используется в файле подкачки?
gpt-3.5-turbo
powershell
Copy
$counterName = '\Paging File(_Total)\% Usage'
$counter = Get-Counter -Counter $counterName
$usagePercentage = $counter.CounterSamples.CookedValue
Write-Output "Процент использования файла подкачки: $usagePercentage%"
GPT-3.5

Human
как это получить из wmi?
gpt-3.5-turbo
powershell
Copy
$memoryUsage = Get-WmiObject -Class Win32_OperatingSystem | Select-Object -ExpandProperty FreePhysicalMemory
$memoryUsageGB = [math]::Round($memoryUsage / 1GB, 1)
GPT-3.5

Human
как узнать, сколько используется в файле подкачки с ипользованием информации из wmi?
gpt-3.5-turbo
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"
GPT-3.5

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"
GPT-3.5

Human
А как без Measure-Object
gpt-3.5-turbo
powershell
Copy
$counter = Get-Counter -Counter "\Paging File(_Total)\% Usage"
$pageUsage = $counter.CounterSamples[0].CookedValue
$pageUsage
GPT-3.5

Human
в каких единицах измерения получается результат?
gpt-3.5-turbo
GPT-3.5
Share
Continue chat