PowerShell - [решено] Перебор выхода "tasklist"

Аватара пользователя
popovichan

PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

Доброго дня суток!

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение Iska »

Ну, например:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

(
    "{`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, Вы уверены, что Вам нужен именно указанный, а не такой:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

{
    "data":[
        {
            "{#PNAME}":"##1"
        },
        {
            "{#PNAME}":"##2"
        },
        {
            "{#PNAME}":"##n"
        }
    ]
}







формат?
Аватара пользователя
Iska

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение Iska »

Цитата Iska:



Вы уверены, что Вам нужен именно указанный, а не такой:
PowerShell - [решено] Перебор выхода "tasklist"




Да. В системе имеется 1 "шаблон" для HDD но он написан на CMD, и именно в таком виде



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@echo off 
echo {"data": 
echo    [ 
echo      {"{#DISKPORT}":"/dev/sda","{#DISKTYPE}":"ata","{#DISKMODEL}":"Hitachi HDS721616PLA380","{#DISKSN}":"20202020202056503342"},
echo      {"{#SMARTV}":"Smartctl 6.5"}
echo    ] 
echo }







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

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

Цитата popovichan:



Еще заметил одну вещь, возможно ли за одно проверять на совпадение (несколько процессов имеют одинаковое название, если уже есть такое, что чтоб не добавлял)
PowerShell - [решено] Перебор выхода "tasklist"







Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

(
    "{`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'
Аватара пользователя
Iska

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение Iska »

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

Цитата popovichan:



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






Код:

Код: Выделить всё

@{"data" = (Get-Process | Select-Object -Property ProcessName -Unique | ForEach-Object -Process {@{"{#PNAME}" = $_.ProcessName}})} | ConvertTo-Json | Set-Content -Path 'C:\Мои проекты\0051\process.txt'
Аватара пользователя
Iska

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение Iska »

Если использую данную конструкцию то он ругается на отсутствие командлета JSON



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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

Re: PowerShell - [решено] Перебор выхода "tasklist"

Сообщение popovichan »

Если использую данную конструкцию то он ругается на отсутствие командлета JSON



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»