28 февраля 2009

Тестирование CAS серверов Exchange

Не так давно мне достались в управление несколько серверов Exchange 2007. Когда понадобилось срочно наладить хоть какую-то систему мониторинга. Не секрет что в Exchange Management Shell есть множество командлетов для тестирования различных сервисов, все они начинаются с Test- и получить их список можно командой

get-excommand Test-*

Я решил использовать эти командлеты в скрипте который будет проверять доступность всех сервисов.

Я использовал следующий метод:

как я уже писал в предыдущем посте можно получить пароль пользователя в виде объекта PowerShell:

$pass = cat C:\scripts\securestring.txt | convertto-securestring

Записываем имя пользователя в переменную

$un = "username"

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

$mycred = new-object -typename System.Management.Automation.PSCredential
-argumentlist $un,$pass

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

$cas="server1","server2"

Массив url OWA:

$owaurl = "https://FQDN/owa","https://FQDN/owa"

Функция send-email, тут ее приводить не вижу смысла, легко ищется в интернетах, однако скажу что в качестве параметров функции передается заголовок и тело письма

function sndem { }

Следующие две функции выводят сообщения на консоль, если скрипт запускается не по шедулеру, а ради проверки.

#function errormsg {
# param($tstname,$trgt)
#
# Write-Host "Test " $tstname " on " $trgt", result: Fail" -foregroundcolor "red"
# }
#
#function successmsg {
# param([string]$tstname,[string]$trgt)
# Write-Host "Test" $tstname" on "$trgt", result: Success" -foregroundcolor "green"
#}


Ну теперь собственно основная функция скрипта

foreach ($siteurl in $owaurl) {
$tstowa = Test-OwaConnectivity -URL $siteurl -MailboxCredential $mycred
if ($tstowa.Result -like "Success" )
{
# successmsg "OWA connectivity" $siteurl //выводим сообщение на консоль


}
else
{
# errormsg "OWA connectivity" $siteurl
sndem "Test OWA failed!!!" $siteurl // посылаем сообщение при неудаче
}
}

Аналогично используются комндлеты test-imapconnectivity, test-popconnectivity и протчие.

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

23 февраля 2009

Используем PSCredentials без подтверждения пароля

Частичный перевод отсюда.
Мне понадобилось настроить тестирование OWA посредством powershell скриптов с внешнего сервера. Есть замечательный командлет Test-OwaConnectivity, однако для проверки внешнего OWA-интерфейса (не входящего в домен из которого проходит тестирование) необходимо изменить команду следующим образом.

Test-OwaConnectivity -URL https://[exchange cas server]/owa -MailboxCredential (Get-Credential test)

Однако при использовании командлета Get-Credential необходимо вводить пароль в поп-апе, а если хочется процесс автоматизировать это не приемлимо.
Есть способ, мы можем сохранить пароль в файле, чтобы затем использовать его в качестве передаваемого объекта.

read-host -assecurestring | convertfrom-securestring | out-file C:\что-нибудь там.txt

В последствии пароль может считан из файла в качестве параметров к Get-Credential, например так:

$pass = cat C:\что-нибудь там.txt | convertto-securestring
$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "test",$pass

И в результате мы можем получить выполнить нашу команду

Test-OwaConnectivity -URL https://[exchange cas server]/owa -MailboxCredential $mycred

Или выполнить ее в скрипте, запускаемом по заданию например раз в 5 минут.

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

Сама же строка с данными пароля (например qwerty) выглядит следующим образом:

01088800d08c9ddf0115d1118c7a00c04fc297eb01000000d5a25b6560bb714aab7edb5a87ad4c1
66000000002000000000003760000a8000000100000009ae0746b5f94995e6198881ba58ada9100
00000004800000a0000000100000009c2aba5bf0fcf53ecd573b45c18b127b180000000641b6884
9b09b15b650d5a0a3927569f5d47ba7afc7f8ca14000000b2ce9a87c9e5a4473c9cf0804dcd68de
638d508a

Have fun!

15 февраля 2009

crm's feature

Недавно из-за уборщицы случилось падение sql сервера на котором вертелась база CRM. Все нормально,базу подняли, все вроде работает, но вдруг поступают вопросы клиентов что к CRM порталу не подключится. Начинаю искать, с тоски полез в сам каталог с фронт-ендом, нашел там папочку Test с одним файлом следующего содержания:


<%@ Page language="c#" Inherits="Microsoft.Crm.Test.Pages.TestPage" CodeBehind="Microsoft.Crm.Test.Pages.dll"%>

CRM Test Page

Time : <% = DateTime.Now.ToString() %>



Просто обалденная проверка работоспособности сервиса.