В Citrix provisioning console есть несколько виртуалок. Нужно мониторить доступность каждой из них.
Сделаем скрипт на powershell, причем его будем запускать удаленно, на удаленной машине.
На удаленной машине запустить powershell от имени администратора и выполнить команды:
get-service winrm - чтобы была запущена
Enable-PSRemoting –force
Далее подключим mcli для PVC:
В командной строке выполняем
32bits
“C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”
64bits:
“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\installutil.exe” “C:\Program Files\Citrix\Provisioning Services Console\McliPSSnapIn.dll”
Проверим, что связка powershell - Citrix provisioning console работает:
Добавим
Add-PSSnapin -Name McliPSSnapIn
Теперь команда, которая проверяет статус сервера в Citrix provisioning console (1 - активен, 0 - неактивен)
mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active
Далее создаем скрипт на нашей машине (создаем сессию, выполняем проверку, завершаем сессию).
$client_sess = New-PSSession -ComputerName name_of_my_remote_pc
Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}
$res = Invoke-Command -session $client_sess {mcli-Get DeviceInfo -p deviceName=name_of_your_host -f active}
Remove-PSSession $client_sess
Теперь полный скрипт:
В файле Servers.txt находится список серверов, которые мы должны мониторить в Citrix provisioning console. В каждой строке один сервер. Пробегаем каждый сервер в файле и в Citrix
provisioning console, если все доступны, то высылаем письмо на почту, что все ок, иначе - шлем письмо с ошибкой.
$EmailFrom = “from@yourmail”
$EmailTo = “to@yourmail”
$Encoding = [System.Text.Encoding]::UTF8
$SmtpServer = “10.x.x.x”
[string]$Encoding="utf-8"
$messageParameters = @{
Encoding = [System.Text.Encoding]::GetEncoding($Encoding)
}
$client_sess = New-PSSession -ComputerName name_of_my_remote_pc
Invoke-Command -session $client_sess {Add-PSSnapin -Name McliPSSnapIn}
$count = 0
$f = "C:\Servers.txt"
$file = get-content $f
$sum_str = $file.length
$xx = ""
$text = ""
for ($i = 0; $i -le ($sum_str - 1); $i++) {
$xx = $file[$i]
$res = Invoke-Command -session $client_sess -scriptblock { param($xx) mcli-Get DeviceInfo -p deviceName=$xx -f active} -ArgumentList $xx
if($res -match "active: 1")
{
$text += "Норма: сервер " +$file[$i]+ " активен " +"`n"
}
else {
$count ++
$text += "Ошибка: сервер " +$file[$i]+ " неактивен " +"`n"
}
}
if($count -eq 0)
{
$Subject = "Проверка Citrix Provisioning - норма"
}
else
{
$Subject = "Проверка Citrix Provisioning - ошибка"
}
Remove-PSSession $client_sess
Try
{
get-content -Path $f -ErrorAction Stop
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
}
Catch
{
$Subject = "Проверка Citrix Provisioning - ошибка"
$text += "`n `n"+"Что-то не так"
Send-MailMessage @messageParameters -From $EmailFrom -To $EmailTo -SmtpServer $SmtpServer -Body $text -Subject $Subject
Break
}