Показать полную графическую версию : [решено] Перебор выхода "tasklist"
popovichan
15-03-2017, 21:46
Доброго дня суток!
Появилась надобность получать список запущенных процессов в системе 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, так, к слову.
Ну, например:
(
"{`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"
}
]
}
формат?
popovichan
16-03-2017, 11:59
Вы уверены, что Вам нужен именно указанный, а не такой: »
Да. В системе имеется 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 }
Конструкция работает, осталось проверить на обнаружение (вывод).
Еще заметил одну вещь, возможно ли за одно проверять на совпадение (несколько процессов имеют одинаковое название, если уже есть такое, что чтоб не добавлял)
Еще заметил одну вещь, возможно ли за одно проверять на совпадение (несколько процессов имеют одинаковое название, если уже есть такое, что чтоб не добавлял) »
(
"{`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'
popovichan
16-03-2017, 12:46
Фильтрация прошла успешно, вот только вывод без "echo" zabbix не понимает :dont-know
popovichan
16-03-2017, 13:20
Да, Вы оказались правы, запись имеет именно такой вид, я не обратил внимание на то что в шалоне присутствует только разные "итемы" для поиска
popovichan
16-03-2017, 14:07
Я немного изменил скрипт для получения удовлетворительного результата, и для правильной работы осталось только одна вещь
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} шла сразу, а не с новой строки
запись имеет именно такой вид, »
@{"data" = (Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {@{"{#PNAME}" = $_.ProcessName}})} | ConvertTo-Json | Set-Content -Path 'C:\Мои проекты\0051\process.txt'
popovichan
16-03-2017, 14:42
Если использую данную конструкцию то он ругается на отсутствие командлета 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.
popovichan
16-03-2017, 20:22
Подправил скрипт, заработало, спасибо за помощь!
Решение:
(
"@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 }
ругается на отсутствие командлета JSON »
Установите PowerShell не ниже третьей версии.
Зачем Вы делаете пакетный файл?
popovichan
17-03-2017, 11:56
Зачем Вы делаете пакетный файл? »
Вывод с txt LLD не понимает, только cmd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.