Программы для микрофона скачать бесплатно

Asterisk. начало

На написание этой статьи меня побудило практически полное отсутствие how-to по настройке Астериска, с понятными новичку примерами. В сети можно найти кучу информации по настройке IVR, по настройке авторизации SIP-пользователей через LDAP, мануалов по созданию HA-кластеров с Астерисками внутри, etc., но нет ни одной статьи о том, как завести его с нуля, да и еще с примерами. Практически везде предлагается сразу же использовать все возможности, которые предлагает Астериск, а если убрать часть функционала, предлагаемого в мануале, то в большинстве случаев это приведет к получению неработоспособной конструкции. Эта статья — результат

хождения по граблям

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

И так, ситуация: вы только что узнали про Астериск и его возможности, и захотели использовать его у себя дома, или ваше руководство захотело IP-телефонию в офис.

Первое что нам необходимо — сервер с установленной операционкой. По ряду причин я выбрал для своих серверов CentOS 6. Все примеры будут с привязкой к этой ОС, так как именно на ней получаются наиболее стабильные сервера. Тем не менее, я ни коим образом не пытаюсь ограничить вас выборе. Астер нормально заведется и под Debian-ом, и под Arch-ем, и даже на FreeBSD. Замечу: желательно не пользоваться гипервизорами на начальном этапе, так как вы можете получить «металлический» голос, либо его полное отсутствие. Про таймеры и прерывания расскажу в следующей статье, так как их описание и настройка выходит за рамки этой статьи. В том случае, если свободного сервера у вас нет и без виртуальной машины не обойтись, обязательно ставьте x86-го гостя.

После того, как вы установили операционку на сервер, можно приступить к установке Астериска. Добавляем репозитории Didgium:

rpm -Uvh http://packages.asterisk.org/centos/6/current/i386/RPMS/asterisknow-version-3.0.1-2_centos6.noarch.rpm
yum update

Устанавливаем dnsmasq:

yum install dnsmasq

Устанавливаем Астериск:

yum install asterisk asterisk-configs --enablerepo=asterisk-12

Важное замечание: цифра в конце строки указывает на мажорную версию Астериска. В примере будет установлена наиболее свежая версия из 12-й ветки, доступная в репозиториях.

После установки перезагружаем сервер и заходим в шелл Астериска:

asterisk -rv

Обратите внимание на ключи, c которыми запускается шелл. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14.

Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:

asterisk*CLI>

Поздравляю, Астериск установился и готов к работе. Но пока что шелл нам не нужен, поэтому пишем exit.

Для того, чтобы сэкономить ваше время и сделать материал понятным, рассмотрим теорию на конкретном примере, а также разберем основные термины, которыми вам придется оперировать при настройке, при общении с саппортом оператора и своими коллегами. Для примера мы заведем двух внутренних пользователей с номерами 100 и 101, и двух операторов телефонии. Один из операторов будет предоставлять нам городские номера через транк с регистрацией, другой будет обеспечивать доступ к направлениям дальней связи, используя транк без регистрации.

Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf. Открываем его:

nano /etc/asterisk/sip.conf

И сразу переходим в конец файла. Вставляем следующий текст:

[internal](!)
type=friend
insecure=invite,port
context=office
fromdomain=<имя домена или IP>
host=dynamic
disallow=all
allow=alaw
qualify=yes
canreinvite=no
nat=no

[100](internal)
secret=XXX
[101](internal)
secret=XXX

Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.

[internal](!)

[internal], это имя шаблона, а (!) указатель шаблона.
Почему сразу начинаем использовать шаблоны? Потому что они сокращают время настройки и уменьшают количество текста с конфигурационном файле, а для понимания они очень просты.

type=friend

Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.

insecure=invite,port
invite — отключается аутентификация при входящем звонке.
port — отключается проверка порта источника.

При первоначальной настройке пропишите оба ключа.

context=office

Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.

fromdomain=<имя домена или IP>

Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.

host=dynamic

IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации.

disallow=all
allow=alaw

Указываем разрешенные кодеки.

В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).

qualify=yes

Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.

canreinvite=no

Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.

nat=no

Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.

[100](internal)
secret=XXX
[101](internal)
secret=XXX

Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль.
На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:

[operator1]
fromdomain=<имя домена или IP>
host=1.2.3.4
insecure=invite,port
port=5060
qualify=yes
type=friend
username=YourLogin
secret=YourPass
disallow=all
allow=alaw
context=operator1

Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя.

Добавим второго оператора:

[operator2]
fromdomain=<имя домена или IP>
host=5.6.7.8
insecure=invite,port
port=5060
qualify=yes
type=friend
disallow=all
allow=alaw. 
context=operator2

Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию.

Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:

register => udp://YourLogin:YourPass:YourLogin@1.2.3.4/YourLogin

Синтаксис, для неподготовленного человека, выглядит сложным, поэтому не заморачивайтесь и просто позвоните в саппорт провайдера и узнайте у них о том, как регистрироваться на сервере Астериском, либо попросите выслать настройки. Как правило, большинство операторов без проблем высылают пример конфигурации под свои софт-свитчи.

Наверняка вы редактировали файлы конфигурации под пользователем с ограниченными правами. Если это так, то Астериск не сможет получить доступ к файлу конфигурации, поэтому пишем:

chown asterisk:asterisk /etc/asterisk/sip.conf

На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:

asterisk -rv

В шелле Астериска пишем команду:

sip reload

Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:

sip show peers

Если вы все настроили правильно, то увидите примерно вот такой вывод:

asterisk*CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status      Description
100/100                 10.0.0.52                              D  Yes        Yes            59080    OK (1 ms)
101/101                 10.0.0.57                              D  Yes        Yes            49973    OK (1 ms)
operator1           1.2.3.4                              No         No             5060     OK (22 ms)
operator2           5.6.7.8                              No         No             5060     OK (22 ms)

Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов.

Состояние регистрации проверяется командой:

sip show registry

Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:

asterisk*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
1.2.3.4:5060                       N      YourLogin               120 Registered
1 SIP registrations.

На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf.

Откроем его командой:

nano /etc/asterisk/extensions.conf

В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:

[general]
static=yes
writeprotect=no

[globals]

Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует.

Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:

[office]
exten => _1XX,1,Dial(SIP/${EXTEN})

Разберем эту строку.

[office]

— имя контекста, в котором обрабатываются звонки от пира.

exten =>

— указатель начала шага.

_1XX

— маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана.

Маска использует набор паттернов для сортировки звонков по caller-id:

X – любая цифра от 0-9
N – любая цифра от 2-9
[234-6] – цифры 2, 3, 4 и 6
. – любые возможные символы

Маска начинается с символа “_”, который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится.

1

— номер действия.

Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.

(SIP/${EXTEN}) — аргументы для приложения. В нашем примере, для внутренних пиров мы используем протокол SIP, поэтому первый аргумент, который мы передаем dial-у — указывает на используемый протокол сигнализации. ${EXTEN} — текущий экстеншен, его значение берется из заголовка (из поля destination).

/ — разделитель для передаваемых аргументов.

Каждый из параметров разделяется запятыми. В нашем примере используются трехзначные номера, поэтому в маске должно быть 3 паттерна. В случае, если вы захотите использовать иную длину нумерации, то пишите в маске нужное количество паттернов. Теперь сохраняем файл, открываем шелл астериска и пишем команду:

dialplan reload

Если возникли проблемы с доступом к файлу, то пишем:

chown asterisk:asterisk /etc/asterisk/extensions.conf

И снова перезагружаем диалплан через шелл Астериска.

:/>  Скачать бесплатно программы для создания загрузочной флешки

Теперь пробуем звонить. Если вы все правильно настроили, то пир с номером 100 дозвонится до пира с номером 101. Сейчас мы можем звонить внутри офиса, между пирами, которые работают в контексте office. Для того что бы позвонить в город, нам нужно написать правило для исходящих звонков через первого оператора. Прописываем его в контекст office, выглядит оно так:

exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Перезагружаем диалплан и пробуем звонить в город.

Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:

[operator1]
 exten => s,1,Dial(SIP/100&SIP/101)

Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s».

Сохраняемся и перезагружаем диалплан. Теперь мы можем принять входящий звонок через оператора, предоставляющего нам городской номер.

Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:

exten => _89XXXXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

Сохраняемся, перезагружаем диалплан и звоним. Все. Теперь мы можем полноценно использовать услуги оператора, предоставляющего городской номер.

Однако, тут кроется небольшая проблема, которая возникнет при звонке на сотовые телефоны других регионов. Так как номер телефона федеральный, то все звонки пойдут через первого оператора. Поэтому уместно уменьшить размер масок в диалплане. К примеру:

exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)

С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи.

Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:

exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)
same => n,Dial(SIP/${EXTEN}@operator2)

Как вы заметили, тут появились новые приложения, которые обрабатывают звонки.

Set(CALLERID(num)=74991234567)

— так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору.

same => n

— указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:

exten => 78121234567,1,Answer
exten => 78121234567,1,Set(CALLERID(name)=Trunk_1
exten => 78121234567,1,Dial(SIP/1000)

Можно заменить на:

exten => 78121234567,1,Answer
same => n,Set(CALLERID(name)=Trunk_1
same => n,Dial(SIP/1000)

Во втором случае все гораздо проще, не так ли?

На этом все, мы настроили Астериск. Теперь мы можем звонить в город, на сотовые, по межгороду и у нас есть внутренняя связь между пирами. Получаем вот такой, вполне рабочий диалплан:

[general]
static=yes
writeprotect=no

[globals]

[office]
exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567)
same => n,Dial(SIP/${EXTEN}@operator2)
exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)
exten => _1XX,1,Dial(SIP/${EXTEN})

[operator1]
exten => s,1,Dial(SIP/100&SIP/101)

Спасибо за внимание.

2 операции [zabbix documentation 5.4]

Для настройки операции, в диалоге настройки действия перейдите на вкладку Операции и в блоке Операции нажмите на Новая. Измените шаг операции и нажмите Добавить для добавления в список Операции.

Атрибуты операции:

Программы для микрофона скачать бесплатно

Все обязательные поля ввода отмечены красной звёздочкой.

ПараметрОписание
Длительность шага операции по умолчанию Длительность одного шага операции по умолчанию (от 60 секунд до 1 недели).
Например, длительность шага в один час означает, что если эта операция выполняется, то следующая операция начнется через один час.
Начиная с Zabbix 3.4.0, поддерживаются суффиксы времени, например, 60s, 1m, 2h, 1d.
Поддерживаются пользовательские макросы начиная с 3.4.0.
Тема по умолчаниюТема сообщений по умолчанию для оповещений. Тема может содержать макросы. Это поле ограничено длиной в 255 символов.
Сообщение по умолчаниюСообщение по умолчанию для оповещений. Сообщение может содержать макросы. Это поле ограничено некоторым количеством символов, которое зависит от типа базы данных (для получения более подробных сведений смотрите Отправка сообщения).
Приостановить операции для подавленных проблемОтметьте эту опцию для задержки начала операций в течении периода обслуживания. Когда операции начнутся, после периода обслуживания, выполнятся все операции, включая те, которые для событий во время обслуживания.
Если вы не отметите, операции будут выполняться без задержки даже в процессе периода обслуживания.
Эта опция поддерживается начиная с Zabbix 3.2.0.
ОперацииОперации действия отображаются со следующими деталями:
Шаги – шаг(и) эскалации к которым назначаются операции
Детали – тип операции и ее получатель/цель.
Начиная с Zabbix 2.2, список операций также отражает способ оповещений (e-mail, SMS, Jabber и т.п.), используемый для отправки сообщения, а также имя и фамилию (в круглых скобках после псевдонима) получателя оповещения.
Начинать в – через какое время после события выполнится эта операция
Длительность (сек) – отображение длительности шага. Отображается по умолчанию, если шаг имеет длительность по умолчанию, и отображается время, если используется указанное время.
Действие – отображаются ссылки для изменения и удаления операции.
Для добавления новой операции, нажмите на Новый.
Детали операций Этот блок используется для настройки параметров операции.
ШагиВыберите шаг(и) для назначения операции в расписание эскалаций:
От – выполнять, начиная с этого шага
До – выполнять, до этого шага (0=бесконечно, выполнение не будет ограничено)
Длительность шагаПользовательская длительность для этих шагов (0=использовать длительность шага по умолчанию).
Начиная с Zabbix 3.4.0, поддерживаются суффиксы времени, например, 60s, 1m, 2h, 1d.
Поддерживаются пользовательские макросы начиная с 3.4.0.
На один шаг можно назначить несколько операций. Если такие операции будут иметь разную длительность шага, то учитывается самая короткая и она будет применена к шагу.
Тип операцииДля всех событий доступно два типа операций:
Отправлять сообщение – отправление сообщения пользователю
Удаленная команда – выполнение удаленной команды
Остальные операции доступны для событий основанных на обнаружении и автоматической регистрации (см. выше).
Тип операции: отправка сообщений
Отправлять группам
пользователей
Нажмите на Добавить для выбора групп пользователей, которым будет отправляться сообщение.
Группа пользователей должна иметь по крайней мере права доступа на “чтение” узла сети, чтобы получить уведомления.
Отправлять пользователямНажмите на Добавить для выбора пользователей, которым будет отправляться сообщение.
Пользователь должен иметь по крайней мере права доступа на “чтение” узла сети, чтобы получить уведомления.
Отправлять только черезОтправка сообщения по всем заданным способам оповещений или только по выбранному.
Сообщение по умолчаниюЕсли выбрано, будет использовано сообщение по умолчанию (смотрите выше).
ТемаТема пользовательского сообщения. Тема может содержать макросы. Это поле ограничено длиной в 255 символов.
СообщениеПользовательское сообщение. Сообщение может содержать макросы. Это поле ограничено некоторым количеством символов, которое зависит от типа базы данных (для получения более подробных сведений смотрите Отправка сообщения).
Тип операции: удаленная команда
Список целейВыберите цели, на которых будет выполняться команда:
Текущий узел сети – команда будет выполнена на узле сети триггер которого вызвал это событие о проблеме. Эта опция не будет работать, если триггер содержит несколько узлов сети.
Узел сети – выберите узел/узлы сети, на котором команда будет выполнена.
Группа узлов сети – выберите группу(ы) узлов сети, на котором команда будет выполнена. Указав родительскую группу узлов сети косвенным образом будут выбраны все вложенные группы узлов сети. Таким образом, удаленная команда будет также выполнена на узлах сети из вложенных групп.
Команда выполняется на узле сети только один раз, независимо от того совпадает ли узел сети более одного раза (например, входит в несколько групп узлов сети; указан отдельно и входит в группу узлов сети).
Список целей не имеет смысла, если пользовательский скрипт выполняется на Zabbix сервере. В этом случае выбор нескольких целей приведет только к тому, что скрипт выполнится на сервере несколько раз.
Обратите внимание, выбор цели также зависит от настройки Группа пользователей в конфигурации глобального скрипта.
ТипВыберите тип команды:
IPMI – выполнение IPMI команды
Пользовательский скрипт – выполнение пользовательского набора команд.
SSH – выполнение SSH команды
Telnet – выполнение Telnet команды
Глобальный скрипт – выполнение одного из глобальных скриптов определенных в Администрирование→Скрипты.
Выполнить наВыполнение пользовательского скрипта на:
Zabbix агент – скрипт будет выполнен Zabbix агентом на хосте
Zabbix сервер (прокси) – скрипт будет выполнен Zabbix сервером или прокси – в зависимости от того кем наблюдается узел сети сервером или прокси
Zabbix сервер – скрипт будет выполнен только на стороне Zabbix сервера
Для выполнения скриптов на стороне агента необходимо настроить (включён параметр EnableRemoteCommands) разрешение выполнения удаленных команд с сервера.
Для выполнения скриптов на стороне прокси необходимо настроить (включён параметр EnableRemoteCommands) разрешение выполнения удаленных команд с сервера.
Это поле доступно, если как Тип выбран ‘Пользовательский скрипт’.
КомандыВведите команду(ы).
Поддерживаемые макросы будут раскрыты на основании выражения триггера, которое вызвало событие. Например, макрос узла сети будет раскрыт в узлы сети из выражения триггера (не в узлы сети из списка целей).
УсловияУсловие выполнения операции:
Не подтверждено – только, если событие не подтверждено
Подтверждено – только, если событие подтверждено

Powershell remoting — настройка и удаленное управление

Здесь минимум теории, в основном практическая часть. Описывается как настроить WinRM, как изменить профиль сетевого адаптера, дается скрипт по добавлению в TrustedHosts с фильтрацией, объясняется зачем нужны доверенные хосты, и рассматриваются поверхностно удаленные подключения так чтобы можно было сесть и сразу админить удаленные машины.

Наиболее простой путь сконфигурировать удаленное управление это выполнить Enable-PSRemoting в оболочке powershell с правами администратора. При этом произойдет следущее:

После этого нужно разрешить подключаться к удаленной машине с той машины с которой будет происходить управление. Сделано это в целях безопасности для того чтобы уменьшить риск взлома сессии удаленного управления или DNS с подстановкой себя вместо удаленной машины и предотвратить исполнение скриптов на машинах которые вы принудительно не разрешили.

для проверки куда можно подключаться используем:

get-item wsman:localhostClientTrustedHosts

для разрешения подключаться ко всем

set-item wsman:localhostclienttrustedhosts -value *

Если вы открываете доступ для всех указав * то WinRM будет подключаться ко ВСЕМ машинам без проверки. Помните, что вы открываете самого себя для потенциального взлома из локальной сети. Лучше указывать адреса хостов куда вам нужно подключится, тогда WinRM будет отклонять все остальные адреса или имена. Если машина с которой ведется управление находится в домене она будет доверять всем машинам этого домена. Если она не в домене, или в другом домене, то нужно указать в TrustedHosts адрес или имя машины на которую мы будем подключаться.

:/>  Как изменить браузер по умолчанию в Windows 7, 8.1, 10

Добавлять себя на машине к которой мы подключаемся не нужно.

в хелпе указаны команды, я их чуть чуть переделал в скрипт

######################################################################################
# добавляет NewHost в список TrustedHost с фильтрацией если такая строка уже есть
# можно дергать из командной строки указывая параметр напрямую например
# .Add-TrustedHost.ps1 192.168.2.1
######################################################################################
param ( $NewHost = '192.168.2.89' )

Write-Host "adding host: $NewHost"

$prev = (get-item WSMan:localhostClientTrustedHosts).value
if ( ($prev.Contains( $NewHost )) -eq $false)
{ 
    if ( $prev -eq '' ) 
    { 
        set-item WSMan:localhostClientTrustedHosts -Value "$NewHost" 
    }
    else
    {
        set-item WSMan:localhostClientTrustedHosts -Value "$prev, $NewHost"
    }
}

Write-Host ''
Write-Host 'Now TrustedHosts contains:'
(get-item WSMan:localhostClientTrustedHosts).value

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

Есть разница указывать имя или адрес. Если в TrustedHosts будет только адрес то открыть сессию по имени не получится, и наоборот — если указать имя то прицепится по адресу не получится. Учитывайте это.

Часто встречается ссылка на команду

WinRM quickconfig

это не тоже самое что

Enable-PSRemoting


Удаленные подключения
1. Сессии 1-to-1

открываются командой

Enter-PSSession -ComputerName Test

Вы получите оболочку на удаленной машине. Подключится можно к самому себе указав localhost. Альтернативные кредиталы указываются с параметром

-Credential

, выход происходит командлетом

Exit-PSSession

Ограничения следующие:

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

Комментарий.
объекты переданные по сети обрезаются и перестают быть живыми. У них удаляются методы, свойства остаются. Вытащить объект на свою машину, поколдовать и засунуть обратно не получится. Если нужно больше пишите, допишу отдельно.

2. Сессии 1-to-many

Invoke-Command

определяем что будем исполнять так:

$sb = { команды для удаленной машины разделенные точкой с запятой }

передаем на удаленные машины Test1 и Test2

Invoke-Command -ComputerName Test1, Test2 -ScriptBlock $sb

за раз можно забросить на 32 машины. Если альтернативные кредиталы то используем параметр -Credential

Чтобы передать целиком скрипт вместо параметра -ScriptBlock пишем -FilePath, удаленной машине НЕ нужно иметь доступ к файлу, он будет разобран на запчасти, передан через HTTP и выполнен с той стороны.

Запомним что на той стороне будет новый скоп, так что ваш скрипт не получит значений из вашей консоли, а переменные скрипта могут оказаться на той стороне пустыми. Поэтому передавайте сразу целиком готовые инструкции и скрипты с параметрами.

для полноценного использования Invoke-Command надо уметь превращать строки в скрипт блоки. Например у вас есть команды которые зависят от какогото списка, вам нужно сгенерировать строку, превратить ее в ScriptBlock и отправить на удаленный комп:

$sb = [Scriptblock]::Create( $SomeString )

kuda78
В статье пропущен очень важный момент — передача параметров в скрипт на удаленной машине.

$deployRemote = {
param(
[string]$targetEnvName,
[string]$targetUsername)
$Global:ErrorActionPreference = «Stop»
#…
}

Invoke-Command -Session $session -ScriptBlock $deployRemote -ArgumentList ($targetEnvName, $targetUsername)

Да действительно пропущен. Сделал сознательно чтобы не загромождать обзор параметрами и описаниями. Спасибо. Параметр -ArgumentList работает как со скрипт блоками так и со сценариями

3. Сессии
Это когда с той стороны создается копия пошика постоянно висящая в памяти, и в нее отправляются команды. Как результат к ней можно переподключится, ченить долгое запустить на исполнение, цепляться из разных скриптов или разными юзерами. Например у вас есть набор скриптов решающих одну задачу по частям, каждый из них поочереди может подключатся к одной удаленной сессии, видеть результаты работы предыдущих команд, иметь одни загруженные модули, общие переменные, общее окружение, до тех пор пока сессия не будет принудительно закрыта.

Создание сессии происходит командлетом New-PSSession, результат можно поместить в переменную

$DC01 = New-PSSession -ComputerName DC01
$Controllers = New-PSSession DC01, DC02, DC03

использовать можно такие же параметры подключения как в Invoke-Command

Как использовать:
если 1-to-1

Enter-PSSession -Session $DC01

если 1-to-many

Invoke-Command -Sessions $Controllers -ScriptBlock {get-eventlog -logname security -newest 50}

посмотреть какие сессии открыты можно с помощью Get-PSSession, закрыть Remove-PSSession

закрыть вообще все сессии

Get-PSSession | Remove-PSSession

прицепится к сессии можно с помощью Connect-PSSession, отключиться через Disconnect-PSSession

Invoke-Command может создать сразу disconnected сессию, он отправляет команды на исполнение и отключатся, позже можно подключится и сгрузить результаты работы. Делается это параметром -Disconnected. Получение результатов через командлет Recieve-PSSession.

Сессии имеют очень много настроек, возможно даже создание сессий с обрезаным набором команд, модулей и т.п. Называется custom endpoints

Включение / выключение радио / адаптера bluetooth из cmd / powershell в windows 10 – 9 ответов

Это сложно из-за необходимости взаимодействия с WinRT, но это возможно в чистом PowerShell:

[CmdletBinding()] Param ( [Parameter(Mandatory=$true)][ValidateSet('Off', 'On')][string]$BluetoothStatus ) If ((Get-Service bthserv).Status -eq 'Stopped') { Start-Service bthserv } Add-Type -AssemblyName System.Runtime.WindowsRuntime $asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | ? { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0] Function Await($WinRtTask, $ResultType) { $asTask = $asTaskGeneric.MakeGenericMethod($ResultType) $netTask = $asTask.Invoke($null, @($WinRtTask)) $netTask.Wait(-1) | Out-Null $netTask.Result } [Windows.Devices.Radios.Radio,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null [Windows.Devices.Radios.RadioAccessStatus,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null Await ([Windows.Devices.Radios.Radio]::RequestAccessAsync()) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null $radios = Await ([Windows.Devices.Radios.Radio]::GetRadiosAsync()) ([System.Collections.Generic.IReadOnlyList[Windows.Devices.Radios.Radio]]) $bluetooth = $radios | ? { $_.Kind -eq 'Bluetooth' } [Windows.Devices.Radios.RadioState,Windows.System.Devices,ContentType=WindowsRuntime] | Out-Null Await ($bluetooth.SetStateAsync($BluetoothStatus)) ([Windows.Devices.Radios.RadioAccessStatus]) | Out-Null 

Чтобы использовать его, сохраните его в файл PS1, например bluetooth.ps1. Если вы этого еще не сделали, следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell, чтобы включить выполнение сценариев в вашей системе. Затем вы можете запустить его из командной строки PowerShell следующим образом:

.bluetooth.ps1 -BluetoothStatus On 

Чтобы выключить Bluetooth, пройдите Offвместо.

Чтобы запустить его из командного файла:

powershell -command .bluetooth.ps1 -BluetoothStatus On 

Предупреждение: если служба поддержки Bluetooth не запущена, сценарий пытается запустить ее, потому что в противном случае WinRT не увидит радио Bluetooth. Увы, сервис не может быть запущен, если скрипт не работает от имени администратора. Чтобы сделать это ненужным, вы можете изменить тип запуска этой службы на автоматический.

Теперь для некоторого объяснения. Первые три строки устанавливают параметры, которые принимает скрипт. Прежде чем начать всерьез, мы должны убедиться, что служба поддержки Bluetooth работает, и запустить ее, если нет. Затем мы загружаем System.Runtime.WindowsRuntimeсборку, чтобы мы могли использовать WindowsRuntimeSystemExtensions.AsTaskметод для преобразования задач в стиле WinRT (которые не понимает .NET / PowerShell) в .NET Task. Этот конкретный метод имеет множество различных наборов параметров, которые, кажется, приводят к снижению разрешения перегрузки PowerShell, поэтому в следующей строке мы получим конкретный метод, который выполняет только результативную задачу WinRT. Затем мы определяем функцию, которую будем использовать несколько раз, чтобы извлечь результат соответствующего типа из асинхронной задачи WinRT. После объявления этой функции мы загружаем два необходимых типа из метаданных WinRT, Остальная часть сценария в значительной степени является просто переводом PowerShell кода C #, который вы написали в своем ответе; он использует Radioкласс WinRT для поиска и настройки радиомодуля Bluetooth.

Запуск радиомодуля с помощью клавиши на клавиатуре

Обычно на клавиатуре ноутбуков Acer, Самсунг, Асус, Lenovo, Тошиба и большинства остальных производителей имеется функциональная клавиша «Fn», предназначенная для того, чтобы управлять различными параметрами, к примеру:

  • подключение WiFi;
  • регулирование яркости экрана;
  • изменение громкости звука и т.п.

При наличии в устройстве встроенного блютуз активировать его можно тоже воспользовавшись данной кнопкой. Притом знак включения модуля должен находиться на одной из кнопок F1- F12, при нажатии на которую в сочетании с «Fn» можно активировать эту функцию.

Производитель

Сочетание клавишAsusFn F5HPFn F3DellFn F12Samsung

Решение популярных проблем

Как ни парадоксально, но даже при использовании блютуз могут возникнуть определенного рода проблемы:

  • нет драйверов;
  • не включается блютуз-модуль;
  • устройство не видит другие девайсы.

Разберем каждый из них поподробнее.

Отсутствие драйверов

В случае если проблема с блютузом заключается в программном обеспечении, вышепредставленная инструкция поможет исправить ее. Однако если она оказалась безрезультатной, в таком случае вероятнее всего вам не повезло столкнуться с аппаратной ошибкой. В этой ситуации поможет лишь обращение в сервисный центр.

Модуль не включается

Подобная проблема также появляется из-за самых разных факторов, начиная от ошибок в операционной системе до аппаратной неисправности. Первое, что необходимо сделать, встретившись с такого рода проблемой – выполнить перезагрузку компьютера либо ноутбука: не исключено, что случился программный сбой, и чистка оперативной памяти ПК сможет помочь от него избавиться.

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

  1. Нужно найти рабочее программное обеспечение для Bluetooth-адаптера и загрузить его на компе.
  2. Откройте «Диспетчер устройств» — легче всего это можно будет сделать, если использовать окно «Выполнить», которое открывается при одновременном нажатии клавиш «Win» и «R». В нем следует ввести devmgmt.msc и нажать «ОК».Программы для микрофона скачать бесплатно
  3. Найдите в списке Радиомодуль блютуз, выделите его и щелкните правой клавишей мыши. В открывшемся меню надо выбрать «Свойства».Программы для микрофона скачать бесплатно
  4. В окне свойств раскройте вкладку «Драйвер». Отыщите кнопку «Удалить» и щелкните по ней.Программы для микрофона скачать бесплатно
  5. В диалоговом окне подтверждения процедуры непременно отметьте пункт «Удалить программы…», после чего жмите «ОК».Программы для микрофона скачать бесплатно
  6. Произведите установку прежде скачанных драйверов и только лишь потом перезагрузите ПК.

Не видит другие устройства

Тоже спорный сбой, однако в этом случае всего лишь программного типа. Вполне вероятно вы пытаетесь подсоединить к компьютеру либо ноутбуку активный аппарат наподобие телефона, планшета или иного устройства, для чего блютуз-приемник необходимо сделать обнаруживаемым.

Для этого надо выполнить следующее:

  1. Откройте панель задач и отыщите в ней знак блютуз. Нажмите по нему правой клавишей мыши и в открывшемся перечне опций найдите «Открыть параметры».Программы для микрофона скачать бесплатно
  2. Первая группа функций, которую необходимо проверить – это блок «Подключения»: все опции в нем должны быть отмечены.Программы для микрофона скачать бесплатно
  3. Основной параметр, из-за которого ПК может не опознавать находящиеся поблизости блютуз-устройства – видимость. За него отвечает функция «Обнаружение». Подключите ее и нажмите «Применить».Программы для микрофона скачать бесплатно
  4. Попробуйте объединить ПК и целевой девайс – данная операция должна закончиться успешно.
:/>  Ключи и лицензии Windows: чем они отличаются? |

После сопряжения компьютера и внешнего устройства функцию «Разрешить устройствам…» предпочтительно выключить в целях безопасности.

Видео по теме:

>

Использование zabbix api. когда не хватает стандартной статистики

Возникла задача получить некоторую статистику из Zabbix, делюсь опытом получения данных из базы Zabbix через API средствами Python.

Программы для микрофона скачать бесплатно

Куски кода будут для Python 2.7

Для работы с zabbix-api есть готовая библиотека py-zabbix, документация по ней доступна тут, но примеров там не много. Официальное руководство по Zabbix API.

Итак, после стандартной установки:

pip install py-zabbix

Пробуем подключиться к серверу Zabbix:

from pyzabbix import ZabbixAPI
z = ZabbixAPI('https://172.16.1.10', user='user1', password='pass1')
answer = z.do_request('apiinfo.version')
print "Version:",answer['result']

Формат ответа от сервера — JSON:

{u'jsonrpc': u'2.0', u'result': u'3.0.2', u'id': u'1'}

Скрипт печатает содержимое поля

result

:

Version: 3.0.2

Теперь можно приниматься за решение интересующей задачи. Задача — получить среднее значение Disk Idle Time со всех виртуальных машин за неделю (Пн-Пт) в рабочее время (с 10:00 до 19:00) за определенную неделю. Я не хочу заострять внимание на актуальности этих параметров, а просто поделиться опытом работы с Zabbix API на примере этой конкретной задачи.

Итак, виртуальные машины в Zabbix лежат в отдельной группе, для начала получим список доступных групп с помощью метода hostgroup.get:

#Get List of available groups
groups = z.hostgroup.get(output=['itemid','name'])
for group in groups:
        print group['groupid'],group['name']

Параметром

output

можно определить, какие поля вернет API:

38 _Local Domains
53 _Local NAS
23 _Local Servers Linux
27 _Local Servers Virtual Linux
25 _Local Servers Virtual Windows
24 _Local Servers Windows
35 _Local Switches

Затем можно получить список хостов в конкретной группе с помощью метода

host.get

:

#Get List of hosts in the group
hosts = z.host.get(groupids=25, output=['hostid','name'])
for host in hosts:
        print host['hostid'],host['name']

Параметр

groupids

определяет идентификатор группы:

10197 DC1_--172.16.1.4--
10204 DC2_--172.16.1.5--
10637 LocalDB_--172.16.1.12--
10686 WSUS_--172.16.1.16--
10708 Jira_--172.16.1.24--

Для получения списка items по определенному хосту используется метод

item.get

:

#Get List of items on the host
items = z.item.get(hostids=10637, output=['itemid','name'])
for item in items:
        print item['itemid'],item['name']

Результат:

525617 ICMP ping
525618 ICMP loss
525619 ICMP response time
940205 Input Microsoft Hyper-V Network Adapter #2
940206 Output Microsoft Hyper-V Network Adapter #2
990808 Disk Idle time on C:
990809 Disk Idle time on D:

Как видно из ответа, выбранный хост имеет 2 диска, нужно вывести минимальное значение из нескольких. Для доступа к данным по items используется метод

history.get

. Следующий код не претендует на оптимальность, я только начал осваивать Python, но в целом с поставленной задачей скрипт справился.

Для метода history.get нужно определить следующие параметры:

Скрипт, собирающий статистику:

from pyzabbix import ZabbixAPI
import time
import sys
z = ZabbixAPI('https://172.16.1.10', user='user1', password='pass1')
groupid = 25 #Local Servers Virtual Windows
hosts = z.host.get(groupids=groupid , output=['hostid','name'])
#Список имен хостов
host_names = [host['name'] for host in hosts]
#Список идентификаторов
host_ids = [host['hostid'] for host in hosts]
nameindex = 0
#Константа, кол-во секунд в сутках
increment = 60*60*24
for host_id in host_ids:
  #параметр search позволяет найти все items, в имени которых есть заданная строка
  items = z.do_request('item.get',{'hostids':[host_id],'output': ['itemid','name'],'search':{'name': 'Idle time'}})
  #массив найденных дисков
  disk_ids = [item['itemid'] for item in items['result']]
  #длина массива соответствует кол-ву дисков
  num_disks = len(disk_ids)
  avg_list=[]
  #цикл подсчета среднего для каждого диска
  for disk in disk_ids:
    #для определения временных рамок используется функция из time
    #первый день, за который нужна статистика - 27 марта 2021 года, с 9:00 до 18:00
    time_from = time.mktime((2021,3,27,9,0,0,0,0,0))
    time_till = time.mktime((2021,3,27,18,0,0,0,0,0))
    history_sum=0
    history_len=0
    #цикл для 5 дней с 27 по 31 марта
    for day in range(0,5):
      data = z.history.get(history = 0, itemids=disk, time_from=time_from, time_till=time_till)
      #массив содержит список значений из истории
      graph  = [float(item['value']) for item in data]
      #если список не пустой, добавляем его в массив для вычисления среднего
      if(len(graph)!=0):
        history_sum =sum(graph)
        history_len =len(graph)
      #увеличиваем интервалы на сутки		
      time_from  = increment
      time_till  = increment
      #если очередь не пустая, добавляем среднее значение по диску в список		
      if(history_len!=0):
        avg_list.append(history_sum/history_len)
      else:
        avg_list.append(0)
    #если список не пустой, берем минимальное значение				
    if(len(avg_list)>0):
      sys.stdout.write(host_names[nameindex])
      print ',',num_disks,',',min(avg_list)
    nameindex =1

В результате получаем разделенные запятой имя хоста, кол-во винтов и min idle time:


DC1_--172.16.1.4--, 1 , 99.0758766296
DC2_--172.16.1.5--, 1 , 97.0989181683
LocalDB_--172.16.1.12--, 2 , 98.9930628704

Благодарю за внимание.

Операторы

Ниже перечисляются операторы в порядке увеличения приоритета. Операторы с одинаковым приоритетом объединяются в символы { }.

выражение1 | выражение2Возвращает значение выражения1, если ни одно из этих выражений не имеет нулевое значение или пустую строку. В противном случае возвращает значение выражения2.

выражение1 & выражение2Возвращает значение выражения1, если ни одно из этих выражений не имеет нулевое значение или пустую строку. В противном случае возвращает нуль.

выражение1 {=, >, >=, <, <=, !=} выражение2Если оба выражения числовые, то оператор возвращает результат сравнения чисел с плавающей точкой. В противном случае возвращается результат сравнения строк, используя локализацию схемы сортировки. Результат каждого сравнения равен 1, если указанное отношение выполняется, или равен 0 в противном случае.

выражение1 { , -} выражение2Возвращает результат сложения или вычитания аргументов, имеющих числовые значения с плавающей точкой.

выражение1 {*, /, %} выражение2Возвращает результат умножения, деления или остатка от деления аргументов, имеющих числовые значения с плавающей точкой.

— выражение1Возвращает результаты вычитания выражения1 из 0. Это унарный оператор, он вычисляется справа налево, и имеет такой же приоритет, как и оператор !

! выражение 1Возвращает результат логического дополнения выражения1. Другими словами, если выражение1 равно 0, пустой строке, или строке «0», то возвращается 1. В противном случае возвращается 0. Данный оператор имеет такой же приоритет, как и унарный оператор -. Он также вычисляется справа налево.

выражение1 : выражение2Данный оператор сопоставляет выражение1 с выражением2, которое должно быть регулярным выражением. Регулярное выражение сцепляется с началом строки при помощи неявной `’. Если сопоставление проходит успешно, и регулярное выражение содержит хотя бы одно регулярное подвыражение `’, то возвращается строка, соответствующая `1′.

В противном случае оператор возвращает количество сопоставленных символов. Если сопоставление не проходит, и регулярное выражение содержит регулярное подвыражение, то возвращается пустая строка. Иначе, возвращается 0.Обычно, двойные кавычки, обрамляющие строку, остаются в качестве части строки.

выражение1 =~ выражение2То же самое, что и оператор «:», за исключением того, что сопоставление не привязано к началу строки. Приносим извинения за схожесть операторов в других языках программирования. Операторы «:» и «=~» имеют один и тот же приоритет.

выражение1 ? выражение2 :: выражение3Традиционный условный оператор. Если выражение1 является числом со значением 0 (false), то результатом становится значение выражения3. В противном случае результатом будет значение выражения2. Если выражение1 является пустой строкой, или состоит из двух кавычек («»), то в качестве результата берется значение выражения3.

В противном случае, результатом станет значение выражения2. В Asterisk будут «вычисляться» все три выражения. Если выражение1 имеет значение «true», то в качестве результат будет использовано значение выражения3, иначе, в качестве результата будет использовано значение выражения3. Этот оператор имеет самый низкий приоритет.

выражение1 ~~ выражение2Оператор конкатенации. Оба выражения вычисляются, и преобразуются в строки, с которых убираются обрамляющие двойные кавычки. Затем эти строки сцепляются в одну строку без пробелов между ними. Данный оператор введен в версии 1.6.0.

Он не требуется в существующем коде extensions.conf. Благодаря способу, которым Asterisk вычисляет конструкции [] (рекурсивно, снизу вверх), при вычислении содержимого [] не существует ничего. То есть, элементы языка уже обычно прошли подстановку к моменту вычисления.

Но в AEL различные выражения вычисляются в исходном виде, и [] собирается и трактуется, как набор лексических элементов. Кроме того, в AEL, никакие два элемента не могут находиться друг с другом без оператора, разделяющего их. Поэтому в AEL конкатенация должна задаваться в выражениях явным образом.

Этот новый оператор будет играть свою роль в будущем, когда выражения (конструкторы) сливаются в одной грамматике. Для группирования операторов обычным образом используются скобки. Приоритет операторов применяется так же, как и в С и в других языках, порожденных от C.

Стандартные канальные переменные asterisk

Существует ряд переменных, определенных в Asterisk. Ниже приводится их список. Более подробная информация доступна в справочном тексте по каждому приложению. Все эти переменные имеют имена, написанные только ЗАГЛАВНЫМИ БУКВАМИ. Переменные, отмеченные символом *, являются встроенными функциями, их значения установить нельзя, они могут быть только считаны в диалплане. Попытка записать значение в такую переменную игнорируется без вывода сообщения.

Переменные, представленные в Asterisk 1.8 и далее:

${CDR(accountcode)} * — учетный код (если задан)${BLINDTRANSFER} — имя канала с другой стороны слепого перевода звонка${BRIDGEPEER} — соединенный пир${BRIDGEPVTCALLID} — ID для PVT-вызова соединенного пира (для вызова SIP — ID вызова SIP)

${CALLERID(ani)} * — автоматическое определение номера (ANI) вызывающего (каналы PRI)${CALLERID(ani2)} * дополнительная информация (ANI2) о номере вызывающего, также называемая OLI, или информация о линии вызова${CALLERID(all)

} * — ID вызывающего ${CALLERID(dnid)} * — Идентификатор набранного номера${CALLERID(name)} * — Только имя из идентификатора вызывающего ${CALLERID(num)} * — Только номер из идентификатора вызывающего${CALLERID(rdnis)

} * — Сервис ID перенаправленного набора номера${CALLINGANI2} * — ANI2 вызывающего (каналы PRI)${CALLINGPRES} * — Представление ID вызывающего для входящих вызовов (каналы PRI)${CALLINGTNS} * — Селектор транзитной сети (каналы PRI)

${CALLINGTON} * — Тип номера вызывающего (каналы PRI)${CHANNEL} * — Имя текущего канала${CONTEXT} * — Текущий контекст${DATETIME} * — Текущие дата и время в формате DDMMYYYY-HH:MM:SS (функция устарела, рекомендуется использовать вместо нее ${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)})

${DB_RESULT} — результирующее значение функции диалплана DB_EXISTS()${EPOCH} * — Текущий стиль эры Unix${EXTEN} * — Текущее расширение${ENV(VAR)} — Переменная окружения VAR${GOTO_ON_BLINDXFR} — Переключение на заданный контекст / расширение / приоритет после слепого переключения (При задании этой переменной в диалплане вместо символов / используйте символ ^, чтобы разделить контекст/расширение/приоритет)

${HANGUPCAUSE} * — Причина прерывания звонка в Asterisk (входного/выходного)${HINT} * — Подсказки канала для данного расширения${HINTNAME} * — Предполагаемое имя ID вызывающего для данного расширения${INVALID_EXTEN} — Ошибочное расширение вызова (используется в расширении «i»)

${LANGUAGE} * — Текущий язык (функция устарела, используйте ${CHANNEL(language)})${LEN(VAR)} — Длина строки VAR (целое) ${PRIORITY} * — Текущий приоритет в диалплане${PRIREDIRECTREASON} — Причина перевода на PRI, если был произведен перевод вызова.

${TIMESTAMP} * — Текущие дата и время в формате YYYYMMDD-HHMMSS (функция устарела, используйте ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})${TRANSFER_CONTEXT} — Контекст переведенного вызова${FORWARD_CONTEXT} — Контекст направленного вызова${DYNAMIC_PEERNAME} — Имя канала с другой стороны при использовании динамической характеристики${UNIQUEID} * — Уникальный идентификатор текущего вызова${SYSTEMNAME} * — Значение опции systemname в asterisk.conf${ENTITYID} * — Глобальный ID элемента. Устанавливается автоматически, или выбирается из asterisk.conf

Оставьте комментарий

Adblock
detector