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

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

Ответить
Настройки темы
PowerShell - [решено] Powershell_поиск одинаковых значений массива

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


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

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


Добрый день.
Через сервис рассылки отправляются текстовые уведомления о заказе. они доставляется/(не доставлены/просмотрены/...) в каналы: sms/viber/vk
Имеется .txt файл, содержащий уникальные mid отправленного информационного сообщения.
Для проверки статуса читаю файл, беру оттуда mid, отправляю в foreach и методом Invoke-RestMethod делаю запрос на получения статуса имеющихся mid
Пример ответа сервера по каждой строке:

PS C:\WINDOWS\system32> $a

log : {@{_id=5e46429b2a955d000be61afa; status=query; when=2020-02-13T07:00:05.978Z}}
mid : 17a4b6b5-0bb9-4557-916f-f0775839d474
lastStatusUpdate : 2020-02-13T07:03:14.499Z
status : delivered
code : 7
channel : sms
type : primary

code может принимать 5 значений, channel может принимать 3. Итого 15 разных вариантов
Начал считать с цикле (проверка по 2-м условиям) но явно это не рационально для всех комбинаций
Как вариант - вижу отправить $a.channel+ " " +$a.status в текстовый файл и там посчитать совпадения, но тоже как-то "костыльно"

Как правильно подсчитать количество полученных ответов в комбинации code+channel, чтобы было примерно так:

channel code count
sms 7 2
sms 6 4
viber 7 10
.................

Отправлено: 12:38, 14-02-2020

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата solonenko:
code может принимать 5 значений, channel может принимать 3. Итого 15 разных вариантов »
Вы бы выложили побольше вариантов, а то получается, что надо их самому рисовать, это неинтересно.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 12:55, 14-02-2020 | #2



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

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


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


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

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


Цитата DJ Mogarych:
Вы бы выложили побольше вариантов, а то получается, что надо их самому рисовать, это неинтересно. »
ТАБЛИЦА СООТВЕТСТВИЯ СТАТУСОВ
Код Название статуса Описание статуса
10 interact Взаимодействие пользователя с сообщением (нажата кнопка, отправлено ответное сообщение). Возможен только для акцептированных контактов.
9 seen Сообщение прочитано
7 delivered Сообщение доставлено
6 undelivered Сообщение не удалось доставить
5 expired Время ожидания доставки сообщения истекло

возможные значения параметра channel: sms/viber/vk

т.о.
для sms-возможны статусы 7,6,5
для viber/vk - возможны все 5 статусов
Итого 13 комбинаций. Перебирать if/elseif мне думается сложно и запутанно, да еще и счетчики каждой итерации...

Последний раз редактировалось solonenko, 14-02-2020 в 13:15. Причина: добавил


Отправлено: 13:11, 14-02-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Я имел в виду этих вариантов, чтобы было что импортировать:
Код: Выделить весь код
log : {@{_id=5e46429b2a955d000be61afa; status=query; when=2020-02-13T07:00:05.978Z}}
mid : 17a4b6b5-0bb9-4557-916f-f0775839d474
lastStatusUpdate : 2020-02-13T07:03:14.499Z
status : delivered
code : 7
channel : sms
type : primary
Лучше всего - оригинальные файлы, из которых вы берёте данные.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 14-02-2020 | #4


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


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

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


Цитата DJ Mogarych:
Лучше всего - оригинальные файлы, из которых вы берёте данные. »
Это не файлы, а ответ сервера.
Скрытый текст

Код: Выделить весь код
log              : {@{_id=5e466d132a955d000be83ac1; status=delivered; when=2020-02-14T06:31:14.471Z}, @{_id=5e466d132a955d000be83ac0; status=query; when=2020-02-14T06:30:14.719Z}}
mid              : 4e7eea88-315e-4bc8-bd9b-8db5237a03b2
lastStatusUpdate : 2020-02-14T09:43:06.966Z
status           : seen
code             : 9
channel          : viber
type             : accepted

log              : {@{_id=5e466d132a955d000be83ac5; status=query; when=2020-02-14T06:30:16.358Z}}
mid              : 1bb94f6b-34d2-4d70-99a4-8d89d8cfc83c
lastStatusUpdate : 2020-02-14T06:30:20.965Z
status           : delivered
code             : 7
channel          : viber
type             : primary

log              : {@{_id=5e466d132a955d000be83aca; status=seen; when=2020-02-14T06:30:46.689Z}, @{_id=5e466d132a955d000be83ac9; status=delivered; when=2020-02-14T06:30:35.487Z}, @{_id=5e466d132a955d000be83ac8; status=query; when=2020-02-14T06:30:16.061Z}}
mid              : 609e839b-3605-402f-aaca-9772fc3e5dbc
lastStatusUpdate : 2020-02-14T06:31:02.371Z
status           : interact
code             : 10
channel          : viber
type             : accepted

log              : {@{_id=5e466d132a955d000be83ad0; status=query; when=2020-02-14T06:50:17.859Z}}
mid              : cb656a30-de70-4cd5-8be7-cc76e07d9b03
lastStatusUpdate : 2020-02-14T06:50:19.876Z
status           : delivered
code             : 7
channel          : sms
type             : primary

log              : {@{_id=5e466d132a955d000be83ad7; status=seen}, @{_id=5e466d132a955d000be83ad6; status=delivered; when=2020-02-14T06:50:26.680Z}, @{_id=5e466d132a955d000be83ad5; status=query; when=2020-02-14T06:50:16.434Z}}
mid              : fa1c05b6-ff99-4b14-b78d-2e2ee0b22114
lastStatusUpdate : 2020-02-14T07:13:49.026Z
status           : interact
code             : 10
channel          : vk
type             : primary

log              : {@{_id=5e466d132a955d000be83add; status=query; when=2020-02-14T06:50:28.940Z}}
mid              : 9a6a25fc-42ed-4d5f-923e-c3ed0a7f1dfb
lastStatusUpdate : 2020-02-14T06:50:32.923Z
status           : delivered
code             : 7
channel          : sms
type             : primary

log              : {@{_id=5e466d132a955d000be83ae2; status=seen; when=2020-02-14T06:31:11.350Z}, @{_id=5e466d132a955d000be83ae1; status=delivered; when=2020-02-14T06:30:19.407Z}, @{_id=5e466d132a955d000be83ae0; status=query; when=2020-02-14T06:30:16.549Z}}
mid              : 03c9745c-e3b1-499a-907c-f6f02a214bfe
lastStatusUpdate : 2020-02-14T06:31:22.884Z
status           : interact
code             : 10
channel          : viber
type             : accepted

log              : {@{_id=5e466d132a955d000be83ae8; status=query; when=2020-02-14T06:50:17.760Z}}
mid              : 83d42465-139d-41fa-9358-3808c83c807f
lastStatusUpdate : 2020-02-14T06:50:21.883Z
status           : delivered
code             : 7
channel          : sms
type             : primary

log              : {@{_id=5e466d132a955d000be83aee; status=query; when=2020-02-14T06:35:18.089Z}}
mid              : ae6d2b8e-baa0-4a86-a736-bc7102e5e652
lastStatusUpdate : 2020-02-14T06:35:22.334Z
status           : delivered
code             : 7
channel          : sms
type             : primary

log              : {@{_id=5e466d132a955d000be83af4; status=delivered; when=2020-02-14T06:50:23.293Z}, @{_id=5e466d132a955d000be83af3; status=query; when=2020-02-14T06:50:16.989Z}}
mid              : 327f532f-abd0-42f5-9753-c192c1120b8e
lastStatusUpdate : 2020-02-14T06:50:36.575Z
status           : seen
code             : 9
channel          : vk
type             : primary

log              : {@{_id=5e466d132a955d000be83afa; status=query; when=2020-02-14T06:30:18.710Z}}
mid              : 6248ed00-1943-4f3d-9c65-d302c2875afc
lastStatusUpdate : 2020-02-14T06:30:42.822Z
status           : undelivered
code             : 6
channel          : sms
type             : primary

log              : {@{_id=5e466d132a955d000be83aff; status=seen; when=2020-02-14T06:31:59.272Z}, @{_id=5e466d132a955d000be83afe; status=delivered; when=2020-02-14T06:31:30.791Z}, @{_id=5e466d132a955d000be83afd; status=query; when=2020-02-14T06:30:17.075Z}}
mid              : 79533b7c-4eb1-481d-9203-ada703a4513d
lastStatusUpdate : 2020-02-14T06:32:03.919Z
status           : interact
code             : 10
channel          : viber
type             : accepted


Я беру txt-файл(лог отправки), в нем каждый mid отправляю на проверку статуса - получаю ответ.
Задача: сделать статистику по каналам доставки и статусу

Отправлено: 13:49, 14-02-2020 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


А сервер это возвращает как простой текст?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 14:43, 14-02-2020 | #6


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


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

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


Цитата DJ Mogarych:
А сервер это возвращает как простой текст? »
Код: Выделить весь код
$a= Invoke-RestMethod  -Uri "https://sd.flomni.com/status/?data=+$($find[0])" -ContentType "application/json; charset=utf-8" -Headers $headers_voice -Method Get

Код: Выделить весь код
PS C:\WINDOWS\system32> $a
log              : {@{_id=5e466d132a955d000be83aff; status=seen; when=2020-02-14T06:31:59.272Z}, @{_id=5e466d132a955d000be83afe; status=delivered; when=2020-02-14T06:31:30.791Z}, @{_id=5e466d132a955d000be83afd; status=query; when=2020-02-14T06:30:17.075Z}}
mid              : 79533b7c-4eb1-481d-9203-ada703a4513d
lastStatusUpdate : 2020-02-14T06:32:03.919Z
status           : interact
code             : 10
channel          : viber
type             : accepted
Код: Выделить весь код
PS C:\WINDOWS\system32> $a.GetType()

IsPublic IsSerial Name                                     BaseType                                                                                                                                                                                                                           
-------- -------- ----                                     --------                                                                                                                                                                                                                           
True     True     Object[]                                 System.Array
Есть txt файл с mid. Беру его, извлекаю mid-даю запрос-получаю ответ сервера в виде массива.
В файле допустим 100 mid. Хочу посчитать, сколько из них доставлены, в какие каналы и какой статус последний.

Отправлено: 15:02, 14-02-2020 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Формируете массив из ответов сервера на каждый mid, а потом что-то вроде
Код: Выделить весь код
$array |group channel,code -NoElement

Count Name                     
----- ----                     
    1 viber, 9                 
    1 viber, 7                 
    3 viber, 10                
    4 sms, 7                   
    1 vk, 10                   
    1 vk, 9                    
    1 sms, 6

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 16:01, 14-02-2020 | #8


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


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

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


Цитата DJ Mogarych:
Формируете массив из ответов сервера на каждый mid, а потом что-то вроде »
Знаний не много этой области, уточните пожалуйста.
Получается до foreach я создаю пустой массив. Затем в цикле каждый ответ, в моем случае $a, добавляю в массив. После окончания цикла вывожу $array. Верно понимаю решение?

Отправлено: 16:44, 14-02-2020 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Цитата solonenko:
Есть txt файл с mid. Беру его, извлекаю mid-даю запрос-получаю ответ сервера в виде массива.
В файле допустим 100 mid. »
Для файла вы пишете $array = foreach ($строка in $файл) {чего-то там}, который запрашивает сервер и формирует массив, где будут все результаты. Дальше вы уже группируете.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 18:55, 14-02-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] posh создание массива значений Ageron Скриптовые языки администрирования Windows 1 31-01-2020 16:11
PowerShell - [решено] Массив, подсчет кол-ва одинаковых значений и вывод таблицы God-of-Chaos Скриптовые языки администрирования Windows 1 16-03-2017 08:14
2010 - [решено] Создание макроса для поиска одинаковых значений в ячейках и укомплектовывания dyshes90 Microsoft Office (Word, Excel, Outlook и т.д.) 26 28-01-2015 13:06
Разное - EXCEL - поиск одинаковых значений в ячейках eva.k Microsoft Office (Word, Excel, Outlook и т.д.) 6 07-02-2014 14:33
Поиск одинаковых значений в одной таблице MySQL blackmane Вебмастеру 1 01-04-2012 14:27




 
Переход