Форум программистов, компьютерный форум, киберфорум
Наши страницы
PowerShell
Войти
Регистрация
Восстановить пароль
 
major94
7 / 7 / 1
Регистрация: 17.02.2012
Сообщений: 46
#1

Мониторинг рабочих станций (процессы, загрузка ЦП, ОЗУ, HDD) - PowerShell

06.07.2015, 12:32. Просмотров 2169. Ответов 4
Метки нет (Все метки)

Доброго времени суток. Получил задание от начальника написать скрипт на PowerShell который будет собирать следующую информацию обо всех компах в домене:
  1. Список процессов (ID, Name, PT, VM(MB), PNPM(Mb), WS(Mb))
  2. Загрузка ЦПУ (В процентах)
  3. Количество доступной ОЗУ (В Мб)
  4. Загрузка HDD (загрузка диска в процентах, список разделов, и свободное пространство на разделе)

С 1-3 справился без проблем, а вот с 4 пунктов возникли вопросы, можно-ли вообще определить процент загрузки HDD в процентах?

И с 1 пунктом возник эстетический вопрос: все процессы вываливаются вот в такой форме

IDProcess : 472
Name : svchost#2
PercentProcessorTime : 88
VirtualBytes : 88612864
PoolNonpagedBytes : 56364
WorkingSet : 23908352
А нужно чтобы вылазили в таблицу
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 12:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Мониторинг рабочих станций (процессы, загрузка ЦП, ОЗУ, HDD) (PowerShell):

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

Выбор ОС для сервера и рабочих станций
Доброго всем дня. Раскажите люди кто как и что выберает. ИТ парк небольшой:...

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

соединение 3 рабочих станций
Получил задание,которое не могу выполнить с текущими знаниями,прошу вашей...

Ошибка имен рабочих станций
Добрый день коллеги появилась проблема не корректно отображаются имена...

Имена рабочих станций как?
Как можно определить имена рабочих станций (С#) ? Желательно как можно проще

4
greg zakharov
Покинул форум
1940 / 816 / 233
Регистрация: 07.05.2015
Сообщений: 1,640
06.07.2015, 18:34 #2
Цитата Сообщение от major94
А нужно чтобы вылазили в таблицу
PowerShell
Format-Table -Auto
Цитата Сообщение от major94
...а вот с 4 пунктов возникли вопросы, можно-ли вообще определить процент загрузки HDD в процентах?
Счетчики производительности уже не в моде?
0
Garry Galler
1264 / 1007 / 373
Регистрация: 28.10.2013
Сообщений: 2,563
06.07.2015, 22:09 #3
Лучший ответ Сообщение было отмечено major94 как решение

Решение

major94
Вот кое-что из моих "опытов":
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# выводим названия всех системных счетчиков
(Get-Counter -ListSet *).Paths
 
# выводим названия счетчиков для физ. дисков
(Get-Counter -ListSet Физичес*).Paths
# пример получения информации
Get-Counter "\Физический диск(*)\% активности диска"
# для конкретного диска: указывается порядковый номер диска и все разделы
get-counter "\Физический диск(1 c: b: d: e:)\% активности диска"
# вывод трех замеров с интервалами в 3 сек.
get-counter "\Физический диск(1 c: b: d: e:)\% активности диска" -SampleInterval 3 -MaxSamples 3
# тоже самое, только выводятся непосредственно цифры
(get-counter "\Физический диск(1 c: b: d: e:)\% активности диска" -SampleInterval 3 -MaxSamples 3).CounterSamples.CookedValue
 
# выводим названия счетчиков только для логических дисков
(Get-Counter -ListSet Логич*).Paths
# пример получения информации
get-counter "\Логический диск(*)\% активности диска"
# для конкретного раздела
get-counter "\Логический диск(c:)\% активности диска"
# выводим только цифры
(get-counter "\Логический диск(c:)\% активности диска").CounterSamples.CookedValue
 
 # пример вывода загрузки\активности в % раздела и свободного места на нем
[System.IO.DriveInfo]::getdrives()| ?{
 $_.DriveType -eq "Fixed"}| select `
 @{n="Name";        e={$_.name}},
 @{n="Load/%";      e={"{0:N2}" -f (get-counter ("\Логический диск(" + ($_.name -replace "\","") + ")\% активности диска")).CounterSamples.CookedValue}},
 @{n="FreeSpace/Mb";e={"{0:N2}" -f ($_.TotalFreeSpace/1mb)}}
1
val_adm
0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 3
21.02.2018, 19:07 #4
Цитата Сообщение от major94 Посмотреть сообщение
Загрузка ЦПУ (В процентах)
Добрый вечер, вы общую нагрузку ЦПУ считали или отдельно каждый процесс?
0
KDE777
683 / 506 / 216
Регистрация: 22.01.2016
Сообщений: 1,413
21.02.2018, 20:44 #5
Цитата Сообщение от val_adm Посмотреть сообщение
Загрузка ЦПУ (В процентах)
Может пригодится - вот кусок скрипта, который показывает средний % загрузки ЦП каждого из процессов и общую среднюю загрузку, за 10 секундный интервал.

Кликните здесь для просмотра всего текста

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$pc = 'pc-01'
 
try {$Connection = Test-Connection -ComputerName $pc -Count 2 -EA Stop}
catch {Write-Host "NO network connection to $PC" -fo Red; break}
 
try
{
    $option = New-CimSessionOption -Protocol Dcom
    $session = New-CimSession -ComputerName $pc -SessionOption $option -EA Stop
}
catch
{
    try
    {
        $option = New-CimSessionOption -Protocol Wsman
        $session = New-CimSession -ComputerName $pc -SessionOption $option -EA Stop
    }
    Catch {Write-Host "NOT connect to CimSession on $PC" -fo Red; break}
}
 
$ComputerSystem = Get-CimInstance -ClassName Win32_ComputerSystem -CimSession $session
$CpuCores = $ComputerSystem.NumberOfLogicalProcessors
 
Write-Host 'Please wait for CPU Usage data to be collect...' -fo Yellow
 
if (Get-Counter -ListSet * -ComputerName $pc | ? Paths -Match "\\Процесс\(\*\)\"){$CounterPath = "\Процесс(*)\% загруженности процессора"}
else {$CounterPath = "\Process(*)\% Processor Time"}
 
$CPU_Usage_Counter = (Get-Counter -Counter $CounterPath -SampleInterval 1 -MaxSamples 10 -ComputerName $pc -EA SilentlyContinue).CounterSamples | ? CookedValue -ne 0 | group InstanceName
 
$CPU_Usage_Data = $CPU_Usage_Counter | select Name,@{N='CPU_Usage_%';E={[math]::Round(($_.Group | %{$_.CookedValue} | measure -Average).Average/$CpuCores,2)}}
$CPU_Usage_Data | ? Name -ne '_total' | sort 'CPU_Usage_%' -Des | ft -a
 
Write-Host "NumberOfLogicalProcessors: $CpuCores"
Write-Host "CPU Usage by All Process, %" ( [math]::Round((100 - (($CPU_Usage_Data | ? Name -eq 'idle').'CPU_Usage_%')),2) ) -fo Yellow


Код
Please wait for CPU Usage data to be collect...

Name           CPU_Usage_%
----           -----------
idle                 98,05
explorer              2,34
lsass                 1,66
zabbix_agentd         0,78
powershell_ise        0,78
mstsc                 0,78
vmtoolsd              0,78


NumberOfLogicalProcessors: 2
CPU Usage by All Process, % 1,95
0
21.02.2018, 20:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2018, 20:44
Привет! Вот еще темы с решениями:

Резервное копирование рабочих станций
Добрый день, Есть задача делать резервное копирование файлов пользователей с...

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

Построить сеть из 25 рабочих станций без особых трат
Добрый день, появилась надобность настроить сеть из 25 робочих станций но как...

Мониторинг рабочих столов компьютеров локальной сети
Здравствуйте. Никак не могу сообразить, как правильно сделать мониторинг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru