среда, 7 сентября 2016 г.

Простой grep

В сотый раз залез в гугл, чтобы посмотреть, как искать с помощью grep в консоли Linux.
Дай бог памяти =)
Поэтому пишу сюда, чтобы не забыть!

grep -r «TEXT» /files

пятница, 26 февраля 2016 г.

Быстрое обновление OAB в Exchange 2010



Иногда возникает необходимость быстро перестроить автономную адресную книгу. Выполнить это можно следующей последовательностью действий:
  1. Обновить OAB командой EMS:
    Update-OfflineAddressbook «offline address book»
    (либо Get-OfflineAddressbook | Update-OfflineAddressbook)
  2. В командной строке перезапустить сервис  Microsoft Exchange System Attendant на сервере почтовых ящиков, который назначен для генерации OAB:
    net stop MSExchangeSA & net start MSExchangeSA
  3. Выполнить в EMS команду
    Update-FileDistributionService  CASServerName
    (либо Get-ClientAccessServer | Update-FileDistributionService )
    или в командной строке перезапустить Microsoft Exchange File Distribution на каждом CAS  сервере
    net stop MSExchangeFDS & net start MSExchangeFDS.
Теперь остается в Outlook загрузить обновления адресной книги. Для Outlook 2010 на ленте выбираем Send/Receive, затем Send/Receive Groups и Download Address Book.
Конечно не следует этим злоупотреблять, особенно при больших нагрузках на серверы Exchange.

Информацию брал здесь:
https://isazonov.wordpress.com/2011/08/29/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-oab-%D0%B2-exchange-2010/

четверг, 17 декабря 2015 г.

Пользователи Windows через командную строку

Всем здравствуйте!
Потребовалось создать учетную запись пользователя на очередной ноутбуке с Windows 8 Начальная. Т.к. оснастка Управление пользователями в данной версии отсутствует, то потянувшись к командной строке, в очередной раз понял, что не помню точно команды.

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

Итак, мои повседневные команды по этому случаю:)

Добавляем пользователя root с паролем Pass123
net user root Pass123 /ADD
Установить “пароль никогда не истекает”
WMIC USERACCOUNT WHERE Name='root' SET PasswordExpires=FALSE
Добавляем созданного пользователя в группу Администраторы

net localgroup АДМИНИСТРАТОРЫ root /add

Отключаем пользователей, которых не собираемся больше использовать

net user username /active:no
И вот теперь я с чистой душой могу удалить заметку из своих Гугл-Доков!

Лечим ошибку "Не удалось подключиться к службе клиент групповой политики"

Второй раз встречаюсь с такой проблемой. Ранее на Windows 7, сейчас на 8ке.
Суть в том, что при создании нового локального пользователя не получается войти под ним, что сопровождается следующей ошибкой "Не удалось подключиться к службе клиент групповой политики".

Ниже привожу решение, которое помогло мне.
Брал отсюда https://social.technet.microsoft.com/forums/ru-RU/86e85860-d16c-404e-b267-bd10deebfbdb/windows-windows-7-x86-rus-ent-sp1
  1. Грузимся под администратором, WIN+R, regedit.exe2)идем по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
  2. Создаем REG_MULTI_SZ с названием GPSvcGroup и параметром GPSvc4) создаем в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost раздел GPSvcGroup
  3. В разделе GPSvcGroup создаем еще два параметра:
  4. DWORD (32 бита) название AuthenticationCapabilities значение 0x00003020 (12320)
  5. DWORD(32 бита) название CoInitializeSecurityParam значение 0x00000001 (1)
  6. Перезагружаемся
Или создаем и запускаем соответствующий REG-файл, что быстрее:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost]
"GPSvcGroup"=hex(7):47,00,50,00,53,00,76,00,63,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost\GPSvcGroup]
"AuthenticationCapabilities"=dword:00003020
"CoInitializeSecurityParam"=dword:00000001

понедельник, 14 декабря 2015 г.

Команды PowerShell для Exchange 2010 SP3

Здесь собраны команды, которые я использую в повседневной работе. Список предполагается рихтовать время от времени.
Может быть будет полезно вам, а также сам пользуюсь данной статьей, как шпаргалкой :)

Команда 1
Показывает размеры имеющихся баз данных, а также количество свободного в них места

Get-MailboxDatabase -Status | ft name,databasesize, availablenewmailboxspace -auto

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

Get-Mailbox | Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount

Команда 2a
То же самое, только размер ящиков выводим в мегабайтах, при этом в колонке отображаются только цифры

Get-Mailbox -database "Mail*"| Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, @{label="Mailbox Size (MB)";expression={$_.TotalItemSize.Value.ToMB()}}, ItemCount

Команда 2b
Получить суммарный объем всех почтовых ящиков в базе данных с именем, соответствующей выражению «Mail*»

Get-Mailbox -database "Mail*"| Get-MailboxStatistics | select-object @{label="mbsize";expression={$_.TotalItemSize.Value.ToMB()}}|measure mbsize -sum
Команда 2c
Получить размер всех почтовых ящиков и преобразовать данные в HTML файл. Потом очень удобно из HTML файла копировать в Excel и там уже делать обработку.

Get-Mailbox -database "Main*"| Get-MailboxStatistics | select-object displayname, @{label="mbsize";expression={$_.TotalItemSize.Value.ToMB()}}|sort mbsize|ConvertTo-Html DisplayName, mbsize > c:\
Команда 3
Получить список локальных запросов на перемещение со статусом InProgress, при отображении результатов выводить только две колонки DisplayName и PercentComplete

Get-MoveRequest -MoveStatus InProgress | Get-MoveRequestStatistics | ft DisplayName, PercentComplete

Команда 4
Запустить обработку писем в заданном ящике в соответствии с политиками хранения

Get-Mailbox -Identity name.surname@domain.com | Start-ManagedFolderAssistant

Команда 5
Создать локальный запрос на перемещение всех почтовых ящиков, чье название начинается с «dmitry». Перемещение будет выполняться в базу MainExchangeDb. Важным параметром является -PrimaryOnly, если его не указать, то будет происходить перемещение не только основного почтового ящика, но и архива

Get-Milbox -Identity "dmitry*" | New-MoveRequest -TargetDatabase MainExchangeDb -PrimaryOnly
Команда 5a
Битый час пришлось мне потратить, чтобы получить эту команду. Она позволяет выполнить new-moverequest для ящиков определенного размера. Ключевым моментом здесь является повторяющийся Get-Mailbox в середине команды, который преобразует вывод Get-MailboxStatistics в формат, принимаемый New-MoveRequest

Get-Mailbox -database "Mailbox*" | Get-MailboxStatistics | Where {$_.TotalItemSize -lt 20Mb} | get-mailbox | New-MoveRequest -TargetDatabase MainExchangeDb -PrimaryOnly
Команда 5b
Перемещаем почтовый ящик с большим количеством поврежденных сообщений

get-mailbox -identity name.surname@domain.com | new-moverequest -targetdatabase MainExchangeDb -baditemlimit 100 -AcceptLargeDataLoss  -PrimaryOnly
Команда 5c
Количество одновременно перемещаемых ящиков можно изменить, отредактировав соответствующую строку в файле C:\Program Files\Microsoft\Exchange Server\V14\Bin\MSExchangeMailboxReplication.exe.config

MaxActiveMovesPerTargetMDB = «2»

Команда 6
А вот так смотрим, сколько еще ящиков осталось в базе данных, из которой переносим или в той, куда переносим

get-mailbox -database "Mailbox*"|ft displayname, database | measure-object|ft count

Команда 7
Поиск всех почтовых ящиков, чья архивная база данных соответствует заданному шаблону

get-mailbox | where {$_.ArchiveDatabase -like "Mail*"}

Команда 8
Создание архива в базе данных ArchiveDb для всех почтовых ящиков, чем размер не превышает 1Гб

Get-Mailbox -database "Mailbox*" | Get-MailboxStatistics | Where {$_.TotalItemSize -lt 1Gb} | get-mailbox|enable-mailbox -archive -archivedatabase "ArchiveDb"

Команда 9
Поиск всех почтовых ящиков в базе данных соответствующей шаблону «Mailbox*», при этом размер ящика лежит в диапазоне от 2Гб до 7Гб и displayname не соответствует Ivan Ivanov

Get-Mailbox -database "Mailbox*" | Get-MailboxStatistics | Where {($_.TotalItemSize -gt 2Gb) -and ($_.TotalItemSize -lt 7Gb) -and $_.DisplayName -notlike "Ivan Ivanov"}|sort displayname

Команда 10
Перенос только архивных почтовых ящиков из баз данных, соответствующих «Maii*» в базу данных ArchiveDb

Get-Mailbox | where {$_.ArchiveDatabase -like "Mai*"}|New-MoveRequest -ArchiveOnly -ArchiveTargetDatabase "ArchiveDb"

Команда 11
Задаю всех ящикам во всех базах данных значение «unlimited» для квот, когда будет остановлена отправка почты и когда прием.

Get-Mailbox | set-mailbox -prohibitsendquota "unlimited" -ProhibitSendReceiveQuota "unlimited"

Команда 11a
А так проверяю, что установленные в команде 12a свойства действительно были изменены

Get-Mailbox|ft name,prohibitsendquota,ProhibitSendReceiveQuota

Команда 12
Принудительное обновление OAB (Offline Address Book)

Get-OfflineAddressbook | Update-OfflineAddressbook
Get-ClientAccessServer | Update-FileDistributionService
Команда 13
Очищаем почтовый ящик user.name от писем, удаленных из папки Удаленные (т.е. recoverable items)

Search-Mailbox –identity user.name –SearchDumpsterOnly –DeleteContent

Команда 14
Если мы отключили только что почтовый ящик пользователя и хотим тут же его подключить другой учетке AD, то перезапускаем службу "Банк данных Exchange" и выполняем команду
Clean-MailboxDatabase  MainExchangeDb
, где MainExchangeDb является базой данных отключенного почтового ящика. В противном случае при попытке открыть заново подключенный ящик в OWA или через Outlook будет выдаваться ошибка

Команда 15
Удалить окончательно отключенные (Disabled)/удаленные (SoftDeleted) почтовые ящики

$DeletedMailbox = Get-MailboxStatistics -Database ArchiveDb | where {$_.DisconnectReason -eq "SoftDeleted"} | Select DisplayName, MailboxGuid, Database
$DeletedMailbox | ForEach { Remove-StoreMailbox -Database $_.Database -Identity $_.MailboxGuid -MailboxState SoftDeleted -Confirm:$False}
Команда 16
Импортируем данные из PST файла в архивный почтовый ящик
New-MailboxImportRequest -Mailbox user@domain.com -IsArchive -FilePath \\192.168.10.6\ExchangePSTFiles\Archive\user_first_6_month_2015.pst
Теперь смотрим статус запроса на импорт(подробно)
 Get-MailboxImportRequest|format-list
Смотрим список запросов на импорт
Get-MailboxImportRequest

среда, 2 декабря 2015 г.

История про двухлетний Exchange 2010 SP3

Здравствуйте, дорогие читатели!

Прошел уже месяц с того момента, как я опубликовал первую статью в своем IT-блоге, посвященную настройке SIP-линии с провайдером на АТС Panasonic TDE-100. Рад, что нашел силы и время вернуться к этому блогу и написать очередной пост, который скорее получился в художественном жанре, нежели в классическом IT-тематики. Тем не менее, т.к. это реальный опыт из жизни системного администратора, то надеюсь, что все описанное окажется полезным! А данная статья даст начало целому циклу в похожем формате.

Итак, история :)

Через два года после установки Exchange 2010 SP3 на виртуальную машину Hyper-V возник вопрос с нехваткой места под виртуальный жесткий диск этой самой машины. Изначально хард сервера, являющийся RAID 1 (зеркало) размещал на себе несколько виртуальных машин (виртуальные диски и сами конфигурации), в т.ч. Exchange. Позже  объем почтовой базы вырос (edb-файл с изначальных 200Гб и 80 почтовых ящиков превратился в 500Гб и 150 почтовых ящиков).

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

Впрочем, высвобождение свободного места не остановило рост размера “.vhd” файла, а точнее “.avhd”. Т.к. машина в свое время была получена репликацией, то виртуальный диск состоял из базового файла vhd и файла-разницы avhd. Отметив для себя, что “.vhd” + “.avhd” в сумме прилично превышают размер объединенного файла (у меня vhd весил 400Гб и avhd столько же. Но суммарная емкость диска при этом составляла 650Гб, т.е. 150Гб лишних) решил высвободить АЖ! 15оГб.

На помощь пришло объединение файлов виртуальных жестких дисков. При этом на выполнение задачи было 6 часов до начала рабочего дня. Выключив виртуальную машину с Exchange и сделав актуальную резервную копию запустил процесс объединения дисков. И только тут, увидев “о Боги!”, что Hyper-V при объединении файлов не уменьшает размер avhd файла, а только растит vhd я понял, что запас места на физическом диске перед слиянием у меня должен был быть не меньше размера avhd!

Быстро просчитав в голове альтернативный вариант восстановления из резервной копии на другой жесткий диск (это был WD Green-серии на 3Тб, имевший хороший запас места, но также по предположению гораздо более медленный, чем исходный диск), приготовился получить сообщение от Hypev-V о невозможности объединить диски, которое не заставило себя ждать!!!

Итак, 7 часов утра в Москве, т.е. до начала рабочего дня осталось два часа, именно тогда начнут приходить менеджеры – основные пользователи почты. На руках у меня испорченная операцией слияния дисков виртуальная машина и свежая резервная копия Veeam. Запускаю восстановление из резервной копии. Предполагаемое время 2 часа! Про себя сказал “ура”, хотя в процессе время менялось и уже составляло около трех часов. Но в 9 утра на 90 процентах выполнения Veeam быстро сделал “рывок” и сразу пришел к заветным 100 процентам. И вот она настоящая ничем не замыленная радость!

Виртуальная машина запустилась успешно после 10-15 минут загрузки (для нее это нормально – загрузка самой системы происходить за 3 минуты и потом еще 12 минут со скрипом запускается сеть). В итоге после загрузки потерял только OWA с ошибкой ERR_RESPONSE_HEADERS_TRUNCATED. Тут же нашел в интернете, что решается перезапуском службы MSExchangeFBA, но в моем случае не сработало.

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

То, что я делал дальше, и как решал вопрос с возвращением виртуальной машины Exchange 2010 Sp3 читайте в моей следующей статьи из цикла.

пятница, 6 ноября 2015 г.

Настройка SIP линии на Panasonic TDE-100

Решил установить нашим пользователям возможность переадресовывать звонки с рабочего телефона на мобильный. Для этого требуются «отбойники» для линий по медным парам, а у меня были только такие линии. Заморачиваться с отбойниками не захотел, поэтому решил подключить SIP телефонию на АТС. Нашел удобного провайдера, абонентская только за номер в коде (495) в районе 250р/мес + подставляют наш уже имеющийся номер МТС в определение при исходящих звонках. Меня это устроило.

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



















Нужно было разобраться, в какие поля на АТС вставлять данные, т.к. провайдер SIP-а представления о настройке Panasonic не имел. А также выделить лицензии SIP.

Подключаюсь KX-TDE Maintenance Console. Иду в «1.1 Слот»

Выбираю «Вирт. слот IPCMPR»




































Закидываю плату V-SIPGW16 в виртуальный слот

































И наконец, нажав, заветную «Активац. ключ (А)» попадаю в менюшку,
показывающую мне раскладку по моим лицензиям на IP-транки и SIP-транки.




























Ключевым моментом здесь является, что в поле «Номер работающего IP-шлюза» до слеша стоит количество лицензий, отведенных для IP-транков, к примеру, у меня соединяющих между собой АТС-ки через VPN. А после слеша, количество вообще доступных лицензий. Так вот разница между этими двумя цифрами есть количество лицензий, которые вы отдаете SIP-GW. Т.е. в моем случае — это 4-2=2.
Кроме того числа могут быть только четные.

Применяем настройки, и выделив плату V-SIPGW16 в виртуальном слоте жмем «Свойства порта» в выпадающей менюшке. Попадаем на вкладку «Основное» раздела «Свойства порта виртуального шлюза SIP».











Итак, столбец соединение нам показывает статус SIP-линии. По умолчанию у всех линий стоит статус INS, но т.к. настройки не произведены и по факту АТС через данную линию не может выполнить регистрацию на SIP-сервере, то мы видим «Недоступен». Как только линия поднимется, статус сменится на INS.

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

IP-адрес: адрес сервера SIP провайдера, к которому идет подключение. Что равнозначно «SIP signaling address» равно «RTP media address» в моем случае.
Атрибут канала: здесь должно быть «Основной», по моему так и стоит по умолчанию или выставляйте сами
Имя провайдера: только, чтобы вам не забыть. Ни на что не влияет.
Номер абонента: телефонный номер, в моем случае в формате 7xxxxxxxxxx, т.к. код России и 10 цифр номера. Как я понял, это поле вообще ни на что не влияет в отличие от поля «Имя пользователя» на следующей вкладке.
Имя: это НЕ логин, как можно подумать. На что влияет данное поле установить не удалось, но у меня подключение работает при любом произвольном значении.

Теперь переходим на вкладку «Номер счета»





























Здесь я вывел из сервиса вторую SIP-линию, чтобы посмотреть, какие поля редактируются. Итак:

Имя пользователя: как ни странно, сюда вписывается номер телефона, у меня в формате 7xxxxxxxxxx. Данный номер провайдер использует для подстановки, как исходящего. Именно здесь у меня были основные «танцы с бубном». Т.к. столбец называется совершенно не очевидно для содержимого, то долго не мог понять, почему в INVITE информации провайдер видит от меня не весь что. Я то думал, номер берется из «Номер абонента» на вкладке «Основное», но не тут то было!
ID аутентификации: а вот это логин, по которому ваше SIP-подключение авторизуется. У меня это «SIP регистрационное имя из таблички провайдера».
Пароль аутентификации: здесь все предсказуемо

Вкладка «Регистрация»
Заполняем только одно поле IP-адрес — адрес сервера провайдера, соответственно

Вкладка «Голос/Факс»
В разделе столбцов «Приоритет IP-кодека» у меня на первом месте стоит G.711A — знаю, что этот кодек обеспечивает наиболее высокое качество из представленных. На втором месте G.711Mu. На третьем G.729A — потребляет наименьшее количество трафика. Здесь все зависит от того, как принято у вашего поставщика услуг. «Тип отправки факсов» — здесь у нас Т38, но реально факсами не пользуемся.

И всё! Никакие другие поля заполнять не пришлось. :)

С чем я еще столкнулся

  1. Перед тем, как отключить для настроек линию, находящуюся в INS, можно проверить не выполняется ли по ней звонок через стандартную команду прямого доступа к линии с телефона набором *36*номер_линии.
  2. Т.к. это SIP с регистрацией на сервере, то при падении канала до SIP-провайдера, АТС поймет, что регистрация пропала, и исходящие звонки автоматически начнут поступать со следующей линии в транк группе. Это выгодно отличает способ подключения, когда SIP провайдер дает вам IP-шлюз, а из него уже медью идет кабель в АТС.
  3. Когда у меня были неверно заполнены поля ID аутентификации и  Пароль аутентификации, то линия не вставала в статус INS. Указав же неверно Имя пользователя доступ к линии был получен, но звонок совершить не получалось, т.к. SIP сервер не мог распознать INVITE.