четверг, 8 сентября 2016 г.

SCOM-рассылка уведомлений на почту (все адресаты в одном письме)

По умолчанию SCOM рассылает уведомления об алертах на почту, причем отдельно каждому человеку. Чтобы SCOM рассылал уведомление, и было видно всех адресатов в письме, нужно сделать следующее:
Зайти в Administration - Notifications - Subscribers






Создать новый Subscriber

Нажать Add

В Channel добавить адресатов через запятую.
Теперь письмо от SCOM будет содержать всех получателей письма.

суббота, 30 января 2016 г.

Powershell The remote server returned an error: (401) Unauthorized

Если при get-запросе через Powershell и Invoke-Webrequest появляется ошибка "The remote server returned an error: (401) Unauthorized.", то необходимо использовать -UseDefaultCredentials.
В моем случае и это не помогло, сервер отвечал на запрос: данный браузер или операционная система не поддерживается. Помогло притвориться InternetExplorer через подмену UserAgent:

Invoke-WebRequest -Uri "http://site"-UseDefaultCredentials -UserAgent([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)

воскресенье, 16 августа 2015 г.

Logoff user sessions from Citrix XenApp

<#
В связи с выпуском новой версии Citrix Xenapp 7.6 и Receiver 4.x перестал работать pagent, при помощи которого можно было делать logoff из всех сессий данного пользователя
Данный скрипт удаленно запускает на одной из виртуалок Citrix командлет и выполняет logoff
Ниже представлены различные способы logoff для версий Xenapp 6.5 и выше, а также для версии Xenapp 5.
#>

$client_sess65 = New-PSSession -ComputerName vm_65

Invoke-Command -session $client_sess65 {Add-PSSnapin Citrix*}

Invoke-Command -session $client_sess65 {Get-XASession | Select-Object -Property SessionID,AccountName,ServerName,State  | Where-Object { $_.AccountName -eq 'domain\username'} | Stop-XASession}

Remove-PSSession $client_sess65


#Для версии Xenapp 5
$client_sess50 = New-PSSession -ComputerName vm_50

Invoke-Command -session $client_sess50 {$farm = new-Object -com “MetaframeCOM.MetaframeFarm”}

Invoke-Command -session $client_sess50 {$farm.Initialize(1)}

$stop50 = Invoke-Command -session $client_sess50 {$farm.Sessions | Where-Object {$_.UserName -eq "username"} | foreach {$_.Logoff($_.SessionID)}}

Remove-PSSession $client_sess50



вторник, 14 июля 2015 г.

WebSphere MQ AMQ6090: MQM could not display the text for error

В WebSphere MQ можно просматривать состояние менеджера очередей через консоль. 
Для этого в командной строке нужно набрать
dspmq

Однако появляется ошибка AMQ6090: MQM could not display the text for error

Решение - создать переменную окружения MQS_FORCE_NTLANGID со значением 1033 (это английский). Либо можно поменять настройки профиля на English.

понедельник, 9 марта 2015 г.

вторник, 25 ноября 2014 г.

Мониторинг записей звонков системы ZOOM CallREC при помощи powershell и post-запроса

Существует ZOOM CallREC - система записи разговоров от Cisco.
Иногда с ней возникали проблемы:
1. Звонки переставали писаться.
2. Появлялись битые звонки, которые невозможно было прослушать.
Возникла задача мониторинга таких проблем.
Был доступ только к веб-интерфейсу ZOOM CallREC.
Необходим Powershell не ниже 3 версии.
Скрипт на Powershell отправляет post-запрос веб-серверу ZOOM CallREC, получает ответ, парсит его, результат присылает на почту.
Код скрипта:
#Скрипт делает post-запрос к веб-интерфейсу проверки записей звонков.
 
#Линк на страницу авторизации
$link2 = "http://1.1.1.1/callrec/loginAction.do"
 
#Делаем get-запрос по линку. Сохраняем сессию в переменной fb.
$r = Invoke-WebRequest $link2 -SessionVariable fb
 
#Определяем параметры авторизации для дальнейшей передачи методом post
$form = $r.Forms[1]
$form.Fields["login"] = "login"
$form.Fields["password"] = "password"
 
#Делаем из сохраненной сессии post-запрос по этому же линку, но уже с передачей логина и пароля. Аналогично можно сделать
#"http://1.1.1.1/callrec/loginAction.do?login=login&password=password"
$re = Invoke-WebRequest -Uri $link2 -WebSession $fb -Method Post -Body $form.Fields
 
#Из сохраненной сессии идем по линку со звонками. Но по дефолту всего 10 звонков
#$zz = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/calldatatable" -WebSession $fb
 
#Нам нужно 500 звонков. Поэтому идем из сохранненной сессии сюда, дальше авторедирект наhttp://1.1.1.1/callrec/calldatatable
$xx = Invoke-WebRequest -Uri "http://1.1.1.1/callrec/filteroperation?countperpage=500" -WebSession $fb
 
#Получим ответ от post-запроса
$Text = $xx.Content
 
#Найдем все строки, содержащие getDayName(текущая дата), а затем в этих строках найдем строку вида "td>минус_один_или_два_часа_от_текущего:"
#Если нашли такую строку, значит за последние два часа звонки пишутся
$datestamp2 = get-date -format "\\(d','M','yyyy\\)"
$datestampfile = "getDayName" + $datestamp2
$parsedate = $Text.Split("r") | Select-String $datestampfile
 
$minus_one_hour = (get-date).AddHours(-1).ToString("%h")
$minus_two_hour = (get-date).AddHours(-2).ToString("%h")
$m1 = "td>" + $minus_one_hour + ":"
$m2 = "td>" + $minus_two_hour + ":"
 
$stringcalls1 = $parsedate | Select-String $m1
$stringcalls2 = $parsedate | Select-String $m2
 
#prehratWarning - значок звонка предупреждения. error - значок звонка битого. Посчитаем их количество.
$parsewarningcalls = $Text.Split(" ") | Select-String "prehratWarning"
$parsebadcalls     = $Text.Split(" ") | Select-String "error"
 
#Если количество звонков-предупреждений на 500 общего количества больше либо равно 4 - ошибка.
#Если количество битых звонков на 500 общего количества больше либо равно 4 - ошибка.
if( ($parsewarningcalls.Count -le 30) -And  ($parsebadcalls.Count -le 8) -And ($stringcalls1.Count -gt 0 -Or $stringcalls2.Count -gt 0) )
{
    $Subject = "Норма при проверке: запись звонков"
    $text5 = "Все в норме"
}
else
{
    $Subject = "Ошибка при проверке: запись звонков"
    $text5 = "`n Проверить по ссылке:http://1.1.1.1/callrec/"
}
 
 
if($parsewarningcalls.Count -gt 30)
  {  $text2 =  "`n Обнаружено более 30 звонков-предупреждений из 500 последних      `n" 
  }
else
  {  $text2 = "" }
 
if($parsebadcalls.Count -gt 8)
  {  $text3 = "`n Обнаружено более 8 битых звонков из 500 последних      `n"  }
else
  {  $text3 = "" }
 
 
if(($stringcalls1.Count -eq $NULL -And $stringcalls2.Count -eq $NULL) -Or ($stringcalls1.Count -eq 0 -And $stringcalls2.Count -eq 0) )
  {  $text1 = "`n Звонков не было в течение 2 часов, либо они не пишутся      `n"  }
else
  {  $text1 = "" }
 
 
$text4 = "`n Количество звонков-предупреждений: " + $parsewarningcalls.Count +
           "`n Количество битых звонков: " + $parsebadcalls.Count + "      `n"
 
#Отправим письмо
$EmailFrom = “11@ss.ru”
$EmailTo = “22@ss.ru”
 
$body = $text1 +$text2+$text3+$text4+$text5
 
$Encoding = [System.Text.Encoding]::UTF8
 $SmtpServer = “1.1.1.1”
[string]$Encoding="utf-8"
$messageParameters = @{                       
                               Encoding = [System.Text.Encoding]::GetEncoding($Encoding)
            }
 
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $body -Subject $Subject 

понедельник, 28 июля 2014 г.

Мониторинг служб Windows в SCOM

1) Необходимо создать группу серверов, на которых необходимо мониторить нужную службу. В меню Authoring, выделить Groups, нажать кнопку "Create new group".
2) Назвать группу осознанным именем, в management pack выбрать services.
3) Добавить необходимые сервера и создать группу.
4) В меню Authoring, выделить  Windows Service, нажать кнопку "Add Monitoring Wizard".
5) Выбрать Windows Service из меню
6) Дать осознанное название и выбрать "services" в management pack
7) Задать имя службы с нужного сервера и выбрать группу, которую создали ранее в Targeted group
8) Создать монитор. При желании остановить некритичную службу и проверить работу монитора (как правило срабатывает через 5-10 минут)