Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Перебор выхода "tasklist" (http://forum.oszone.net/showthread.php?t=324891)

popovichan 15-03-2017 21:46 2719807

Перебор выхода "tasklist"
 
Доброго дня суток!
Появилась надобность получать список запущенных процессов в системе 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, так, к слову.

Iska 16-03-2017 08:02 2719873

Ну, например:
Скрытый текст
Код:

(
    "{`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 2719934

Цитата:

Цитата 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 }


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

Iska 16-03-2017 12:39 2719945

Цитата:

Цитата 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'


popovichan 16-03-2017 12:46 2719950

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

popovichan 16-03-2017 13:20 2719964

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

popovichan 16-03-2017 14:07 2719980

Я немного изменил скрипт для получения удовлетворительного результата, и для правильной работы осталось только одна вещь
Скрытый текст
Код:

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} шла сразу, а не с новой строки

Iska 16-03-2017 14:15 2719983

Цитата:

Цитата popovichan
запись имеет именно такой вид, »

Код:

@{"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 2719988

Если использую данную конструкцию то он ругается на отсутствие командлета 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 2720101

Подправил скрипт, заработало, спасибо за помощь!
Решение:
Скрытый текст
Код:

(
    "@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 }

Iska 16-03-2017 22:06 2720133

Цитата:

Цитата popovichan
ругается на отсутствие командлета JSON »

Установите PowerShell не ниже третьей версии.

Зачем Вы делаете пакетный файл?

popovichan 17-03-2017 11:56 2720305

Цитата:

Цитата Iska
Зачем Вы делаете пакетный файл? »

Вывод с txt LLD не понимает, только cmd


Время: 22:25.

Время: 22:25.
© OSzone.net 2001-