Читая superuser/stackoverflow, я не смог придумать сценарий, который выводит% -m-ram (как видно в диспетчере задач Windows) нескольких удаленных машин (например, server1-server4). Вот что я имею в плане кода: платформа должна быть Windows, либо CMD, либо PowerShell (или аналогичная):

1) CMD, не удалось получить% свободного оперативной памяти (т. Е. Не удалось получить доступ к оперативной памяти "занят" для вычисления «занятого / всего * 100». Источника):
wmic /NODE:"servername" /USER:"yourdomain\administrator" OS GET FreePhysicalMemory

2) powershell (источник), не может получить память удаленных машин (то есть не может получить Get-WmiObject удаленной машины):

$system = Get-WmiObject win32_OperatingSystem
$totalPhysicalMem = $system.TotalVisibleMemorySize
$freePhysicalMem = $system.FreePhysicalMemory
$usedPhysicalMem = $totalPhysicalMem - $freePhysicalMem
$usedPhysicalMemPct = [math]::Round(($usedPhysicalMem / $totalPhysicalMem) * 100,1)

любая помощь приветствуется

2 ответа2

1

Я придумал этот довольно обобщенный скрипт, который дает процент свободного оперативной памяти. Для процента используемого барана просто добавьте $a=$b-$a .

$a=0
$b=0
$strComputer = "localhost"
$a=Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer | fl *freePhysical* | Out-String
$b=Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer | fl *totalvisiblememory* | Out-String
$a = $a -replace '\D+(\d+)','$1'
$b = $b  -replace '\D+(\d+)','$1'
[math]::Round($a/$b*10000)/100
1

Использование метода удаленного подключения к WMI с помощью PowerShell по адресу https://msdn.microsoft.com/en-us/library/ee309377(v=vs.85).aspx

Я использовал пример .NET для форматирования номеров отсюда. https://technet.microsoft.com/en-us/library/ee692795.aspx

$Servers = @("localhost")

foreach ($Server in $Servers){

$OS = get-wmiobject -Namespace "root\cimv2" -Class Win32_OperatingSystem -Impersonation 3 -computername $Server

foreach ($Item in $OS){
        $RAM = "{0:N6}" -f ($Item.TotalVisibleMemorySize)/1kB
        $FREE = "{0:N6}" -f ($Item.FreePhysicalMemory)/1kB
        $Server + "`t" + "{0:P0}" -f ($FREE/$RAM)
        }
}

РЕДАКТИРОВАТЬ

Чтобы решить проблемы с числовыми форматами в версиях PS и .net, вы можете использовать десятичный или фиксированный формат вместо числового для исправления. https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#the-decimal-d-format-specifier

$Servers = @("localhost")

foreach ($Server in $Servers){

$OS = get-wmiobject -Namespace "root\cimv2" -Class Win32_OperatingSystem -Impersonation 3 -computername $Server

foreach ($Item in $OS){
        $RAM = "{0:D6}" -f ($Item.TotalVisibleMemorySize)/1kB
        $FREE = "{0:D6}" -f ($Item.FreePhysicalMemory)/1kB
        $Server + "`t" + "{0:P0}" -f ($FREE/$RAM)
        }
}

ИЛИ ЖЕ

$Servers = @("localhost")

foreach ($Server in $Servers){

$OS = get-wmiobject -Namespace "root\cimv2" -Class Win32_OperatingSystem -Impersonation 3 -computername $Server

foreach ($Item in $OS){
        $RAM = "{0:F6}" -f ($Item.TotalVisibleMemorySize)/1kB
        $FREE = "{0:F6}" -f ($Item.FreePhysicalMemory)/1kB
        $Server + "`t" + "{0:P0}" -f ($FREE/$RAM)
        }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .