Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перебор выхода "tasklist"

Ответить
Настройки темы
PowerShell - [решено] Перебор выхода "tasklist"

Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: popovichan
Дата: 15-03-2017
Описание: Дополнение
Доброго дня суток!
Появилась надобность получать список запущенных процессов в системе Win, собственно что и делаю через выхлоп
Код: Выделить весь код
Powershell:
Get-Process -name * | Format-Table -Property ProcessName >> process.txt
После надо разложить содержимое для LLD (Low Level Discovery) к виду:
Код: Выделить весь код
echo {"data": 
echo    [ 
echo      {"{#PNAME}":"##1","{#PNAME}":"##2","{#PNAME}":"##3","{#PNAME}":"##n"}
echo    ] 
echo }
Где ##1...##n собственно название процесса (коих может быть 5-40). Прошу разъяснить что да как возможно реализовать, хотелось бы понять логику работы , заранее буду благодарен.
P.S.: скрипт нужен для мониторинга процессов в zabbix, так, к слову.

Отправлено: 21:46, 15-03-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Ну, например:
Скрытый текст
Код: Выделить весь код
(
    "{`r`n`t`"data`":[`r`n`t`t{" ,
    ((Get-Process | ForEach-Object -Process {"`t`t`t`"{#PNAME}`":`"$($_.ProcessName)`""}) -join ",`r`n"),
    "`t`t}`r`n`t]`r`n}"
) | Set-Content -Path 'C:\Мои проекты\0051\process.txt'


popovichan, Вы уверены, что Вам нужен именно указанный, а не такой:
Скрытый текст
Код: Выделить весь код
{
    "data":[
        {
            "{#PNAME}":"##1"
        },
        {
            "{#PNAME}":"##2"
        },
        {
            "{#PNAME}":"##n"
        }
    ]
}

формат?

Отправлено: 08:02, 16-03-2017 | #2



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

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


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Вы уверены, что Вам нужен именно указанный, а не такой: »
Да. В системе имеется 1 "шаблон" для HDD но он написан на CMD, и именно в таком виде
Скрытый текст
Код: Выделить весь код
@echo off
echo @echo off > c:\zabbix\disks\disks.cmd
echo echo {"data": >> c:\zabbix\disks\disks.cmd
echo echo    [ >> c:\zabbix\disks\disks.cmd
for /F "tokens=1,3" %%a in ('C:\"Program Files"\smartmontools\bin\smartctl.exe --scan') ^
do (for %%s in ("Device Model" "Product") ^
do (for /F "tokens=2*" %%c in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%s ') ^
do (for %%i in ("Serial Number") do (for /F "tokens=3*" %%k in ('C:\"Program Files"\smartmontools\bin\smartctl.exe -i %%a -d %%b ^| find %%i ') ^
do echo echo      {"{#DISKPORT}":"%%a","{#DISKTYPE}":"%%b","{#DISKMODEL}":"%%d","{#DISKSN}":"%%k"},>> c:\zabbix\disks\disks.cmd))))
echo echo      {"{#SMARTV}":"Smartctl 6.5"}>> c:\zabbix\disks\disks.cmd
echo echo    ] >> c:\zabbix\disks\disks.cmd
echo echo } >> c:\zabbix\disks\disks.cmd

Вывод "disk.cmd"
Скрытый текст
Код: Выделить весь код
@echo off 
echo {"data": 
echo    [ 
echo      {"{#DISKPORT}":"/dev/sda","{#DISKTYPE}":"ata","{#DISKMODEL}":"Hitachi HDS721616PLA380","{#DISKSN}":"20202020202056503342"},
echo      {"{#SMARTV}":"Smartctl 6.5"}
echo    ] 
echo }

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

Последний раз редактировалось popovichan, 16-03-2017 в 12:18. Причина: Спойлеры и дополнение


Отправлено: 11:59, 16-03-2017 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата popovichan:
Еще заметил одну вещь, возможно ли за одно проверять на совпадение (несколько процессов имеют одинаковое название, если уже есть такое, что чтоб не добавлял) »
Скрытый текст
Код: Выделить весь код
(
    "{`r`n`t`"data`":[`r`n`t`t{" ,
    ((Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {"`t`t`t`"{#PNAME}`":`"$($_.ProcessName)`""}) -join ",`r`n"),
    "`t`t}`r`n`t]`r`n}"
) | Set-Content -Path 'C:\Мои проекты\0051\process.txt'
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:39, 16-03-2017 | #4


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Фильтрация прошла успешно, вот только вывод без "echo" zabbix не понимает

Отправлено: 12:46, 16-03-2017 | #5


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Да, Вы оказались правы, запись имеет именно такой вид, я не обратил внимание на то что в шалоне присутствует только разные "итемы" для поиска

Отправлено: 13:20, 16-03-2017 | #6


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я немного изменил скрипт для получения удовлетворительного результата, и для правильной работы осталось только одна вещь
Скрытый текст
Код: Выделить весь код
del 'c:\zabbix\scripts\process.cmd'
(
    "@echo off`r`necho`t{`r`n`echo`t`"data`":[`r`necho`t{" ,
    ((Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {"`"{#PNAME}`":`"$($_.ProcessName)`"}"}) -join ",`{"),
    "`necho`t`]`r`necho`t`}"
) | Set-Content -Path 'C:\zabbix\scripts\process.cmd'


на выходе получаю:
Скрытый текст
Код: Выделить весь код
@echo off
echo	{
echo	"data":[
echo	{
"{#PNAME}":"audiodg"},{"{#PNAME}":"CefSharp.BrowserSubprocess"},{"{#PNAME}":"chrome"},{"{#PNAME}":"CMFNSS6"},{"{#PNAME}":"conhost"},{"{#PNAME}":"csrss"},{"{#PNAME}":"cygrunsrv"},{"{#PNAME}":"Dual Package"},{"{#PNAME}":"dwm"},{"{#PNAME}":"explorer"},{"{#PNAME}":"FPinger"},{"{#PNAME}":"hkcmd"},{"{#PNAME}":"Idle"},{"{#PNAME}":"igfxpers"},{"{#PNAME}":"igfxsrvc"},{"{#PNAME}":"igfxtray"},{"{#PNAME}":"lsass"},{"{#PNAME}":"lsm"},{"{#PNAME}":"Mailbird"},{"{#PNAME}":"mmc"},{"{#PNAME}":"mqsvc"},{"{#PNAME}":"mtputty"},{"{#PNAME}":"notepad++"},{"{#PNAME}":"OpenHardwareMonitorService"},{"{#PNAME}":"OSPPSVC"},{"{#PNAME}":"powershell_ise"},{"{#PNAME}":"PresentationFontCache"},{"{#PNAME}":"putty"},{"{#PNAME}":"SearchIndexer"},{"{#PNAME}":"services"},{"{#PNAME}":"SmartHookTestApp"},{"{#PNAME}":"smss"},{"{#PNAME}":"SMSvcHost"},{"{#PNAME}":"snmp"},{"{#PNAME}":"splwow64"},{"{#PNAME}":"spoolsv"},{"{#PNAME}":"sshd"},{"{#PNAME}":"svchost"},{"{#PNAME}":"System"},{"{#PNAME}":"taskhost"},{"{#PNAME}":"TCPSVCS"},{"{#PNAME}":"TestDDCCI"},{"{#PNAME}":"vivaldi"},{"{#PNAME}":"vmware-usbarbitrator64"},{"{#PNAME}":"wininit"},{"{#PNAME}":"winlogon"},{"{#PNAME}":"WmiPrvSE"},{"{#PNAME}":"wmpnetwk"},{"{#PNAME}":"zabbix_agentd"}

echo	]
echo	}

необходимо чтоб после echo { "строка {#PNAME} шла сразу, а не с новой строки

Отправлено: 14:07, 16-03-2017 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата popovichan:
запись имеет именно такой вид, »
Код: Выделить весь код
@{"data" = (Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {@{"{#PNAME}" = $_.ProcessName}})} | ConvertTo-Json | Set-Content -Path 'C:\Мои проекты\0051\process.txt'

Отправлено: 14:15, 16-03-2017 | #8


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Если использую данную конструкцию то он ругается на отсутствие командлета JSON
Скрытый текст
Код: Выделить весь код
The term 'ConvertTo-Json' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a pat
h was included, verify that the path is correct and try again.

Отправлено: 14:42, 16-03-2017 | #9


Новый участник


Сообщения: 12
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подправил скрипт, заработало, спасибо за помощь!
Решение:
Скрытый текст
Код: Выделить весь код
(
    "@echo off`r`necho`t{`"data`":[",
    ((Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {"`echo`t`{`"{#PNAME}`":`"$($_.ProcessName).exe`"}"}) -join ",`n"),
    "`necho`t`]`r`necho`t`}"
) | Set-Content -Path 'C:\zabbix\scripts\process.cmd'

Вывод:
Скрытый текст
@echo off
echo {"data":[
echo {"{#PNAME}":"audiodg.exe"},
echo {"{#PNAME}":"CefSharp.BrowserSubprocess.exe"},
echo {"{#PNAME}":"CMFNSS6.exe"},
echo {"{#PNAME}":"conhost.exe"},
echo {"{#PNAME}":"csrss.exe"},
echo {"{#PNAME}":"cygrunsrv.exe"},
echo {"{#PNAME}":"Dual Package.exe"},
echo {"{#PNAME}":"dwm.exe"},
echo {"{#PNAME}":"explorer.exe"},
echo {"{#PNAME}":"FPinger.exe"},
echo {"{#PNAME}":"hkcmd.exe"},
echo {"{#PNAME}":"Idle.exe"},
echo {"{#PNAME}":"igfxpers.exe"},
echo {"{#PNAME}":"igfxsrvc.exe"},
echo {"{#PNAME}":"igfxtray.exe"},
echo {"{#PNAME}":"lsass.exe"},
echo {"{#PNAME}":"lsm.exe"},
echo {"{#PNAME}":"Mailbird.exe"},
echo {"{#PNAME}":"mmc.exe"},
echo {"{#PNAME}":"mqsvc.exe"},
echo {"{#PNAME}":"mtputty.exe"},
echo {"{#PNAME}":"notepad.exe"},
echo {"{#PNAME}":"notepad++.exe"},
echo {"{#PNAME}":"OpenHardwareMonitorService.exe"},
echo {"{#PNAME}":"OSPPSVC.exe"},
echo {"{#PNAME}":"powershell_ise.exe"},
echo {"{#PNAME}":"PresentationFontCache.exe"},
echo {"{#PNAME}":"putty.exe"},
echo {"{#PNAME}":"SearchIndexer.exe"},
echo {"{#PNAME}":"services.exe"},
echo {"{#PNAME}":"SmartHookTestApp.exe"},
echo {"{#PNAME}":"smss.exe"},
echo {"{#PNAME}":"SMSvcHost.exe"},
echo {"{#PNAME}":"snmp.exe"},
echo {"{#PNAME}":"splwow64.exe"},
echo {"{#PNAME}":"spoolsv.exe"},
echo {"{#PNAME}":"sshd.exe"},
echo {"{#PNAME}":"svchost.exe"},
echo {"{#PNAME}":"System.exe"},
echo {"{#PNAME}":"taskhost.exe"},
echo {"{#PNAME}":"TCPSVCS.exe"},
echo {"{#PNAME}":"TestDDCCI.exe"},
echo {"{#PNAME}":"vivaldi.exe"},
echo {"{#PNAME}":"vmware-usbarbitrator64.exe"},
echo {"{#PNAME}":"wininit.exe"},
echo {"{#PNAME}":"winlogon.exe"},
echo {"{#PNAME}":"WmiPrvSE.exe"},
echo {"{#PNAME}":"wmpnetwk.exe"},
echo {"{#PNAME}":"zabbix_agentd.exe"}

echo ]
echo }

Последний раз редактировалось popovichan, 16-03-2017 в 20:43. Причина: Проблема решена


Отправлено: 20:22, 16-03-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Перебор выхода "tasklist"

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] tasklist "Фильтр не опознан" или "Трудности перевода" awkozlov Скриптовые языки администрирования Windows 10 30-10-2016 03:44
Драйвер - После выхода из ждущего режима "отваливается" клавиатура Nikolaich Microsoft Windows 2000/XP 12 19-03-2013 08:59
Драйвер - "ТЕЛЬНЯЖКА" после выхода из сна.. никола Microsoft Windows 7 2 24-02-2009 18:53
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29
[решено] Настройка "dial up" сервера для выхода в Internet через его adsl-соединение badfilin Сетевые технологии 4 07-09-2006 00:49




 
Переход