Alexander A Manaeff -

 
 

HelpDesk на PowerShell

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки форм спам-ботами.
Смайлики
:| :) :wink: :D :lol: :( :cry: 8) :o :oops: :? :x :P :evil: :twisted: :roll: :!: :?: :idea: :arrow: :mrgreen:
Ещё смайлики…
BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ВКЛЮЧЕНЫ
Обзор темы
   

Развернуть Обзор темы: HelpDesk на PowerShell

HelpDesk на PowerShell

Сообщение UncleFather » 03 сен 2020 16:31, Чт

Задача:

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

Скрипт должен уметь отправлять снимок экрана, имя компьютера, имя пользователя, дату события в общую папку и на email администратора, а так же оповещать о событии по СМС на номер администратора.




Решение:

Собственно, все задачи тривиальны и разобраны ранее, поэтому просто приведу код с комментариями:
 Код скрипта
Код: Выделить всё
$path = "\\Server\Share\Folder"                                  #Папка для сохранения скриншотов
$title = "Описание проблемы"                                     #Заголовок окна ввода описания проблемы
$msg = "Опишите вкратце проблему:"                               #Подсказка окна ввода описания проблемы
$ConstServer = "smtp.server.ru"                                  #SMTP сервер
$ConstSMTPPort = "25"                                            #Порт SMTP сервера (даже при отправке по SSL через 465-й порт оставляем здесь порт 25!!
$ConstFrom = "sender@server.ru"                                  #Адрес отправителя
$ConstTo = "receiver3@server.ru"                                 #Адрес получателя
$ConstMessageTypeHTML = $false                                   #Формат сообщения HTML (true) или обычный текст (false)
$ConstUserName = "user@server.ru"                                #Имя пользователя (ящика) для авторизации на SMTP сервере
$ConstUserPass = "Password"                                      #Пароль для авторизации на SMTP сервере
$SMSAPI_ID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"              #ID сервиса sms.ru
$SMS_Number = "7XXXXXXXXXX"                                      #Номер телефона для отправки SMS сообщения

$ID_String = $env:computername + " " + $env:username + " " + $((get-date).tostring('yyyy.MM.dd-HH.mm.ss'))    #Строка с именем проблемного компьютера, пользователя и датой возникновения проблемы

#Проверяем наличие папки для сохранения снимков экрана
If (!(test-path $path)) {
    #В случае отсутствия, создаем её
    New-Item -ItemType Directory -Force -Path $path
}

#Создаем снимок экрана
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
#Получаем разрешение экрана
$bitmap = New-Object System.Drawing.Bitmap $screen.Width, $screen.Height
#Создаем графический объект
$graphic = [System.Drawing.Graphics]::FromImage($bitmap)
#Получаем снимок экрана
$graphic.CopyFromScreen($screen.location, [Drawing.Point]::Empty, $bitmap.Size);
$graphic.Dispose()
$screen_file = "$path\$ID_String.jpg"
#Сохраняем снимок в файл
$bitmap.Save($screen_file)
$bitmap.Dispose()

#Отправляем SMTP сообщение
$ConstMessageSubject = "Problem with "+ $ID_String                                     #Тема сообщения
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$ConstMessageBody = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)        #Тело сообщения

#Создаем необходимые объекты и задаем переменные, необходимые для отправки и формирования SMTP сообщения:
$SmtpClient = New-Object System.Net.Mail.SmtpClient
$Message = New-Object System.Net.Mail.MailMessage
$SmtpClient.Host = $ConstServer
$SmtpClient.Port = $ConstSMTPPort
$Message.From = $ConstFrom
$Message.To.Add($ConstTo)
$Message.BodyEncoding = [System.Text.Encoding]::UTF8
$Message.SubjectEncoding = [System.Text.Encoding]::UTF8
$Message.IsBodyHtml = $ConstMessageTypeHTML
$Message.Subject = $ConstMessageSubject
$SmtpClient.Credentials= New-Object System.Net.NetworkCredential($ConstUserName , $ConstUserPass)
$Message.Attachments.Add($screen_file)
$Message.Body = (get-date).ToString() + $ConstMessageBody
$SmtpClient.EnableSsl = $True    #Включаем SSL протокол
$SmtpClient.Send($Message) #Отправляем SMTP сообщение

if ($?)
{ # Если SMTP сообщение было отправлено успешно, то
    write-host "Сообщение успешно отправлено"
}
else
{ #Если SMTP сообщение не удалось отправить, то
    write-host "Сообщение не отправлено. Ошибка:" $Error[0].ToString()
}
$Message.Dispose() #Отправляем сообщение QUIT на SMTP-сервер (правильно завершаем TCP-подключение и освобождаем все ресурсы, используемые текущим экземпляром класса SmtpClient)
   
   
#Отправляем СМС при помощи сервиса sms.ru
$SMSAPI_ID = $SMSAPI_ID + "&to=" + $SMS_Number
$ip = (new-object net.webclient).DownloadString("http://sms.ru/sms/send?api_id=$SMSAPI_ID&text=Problem with " + $ID_String)


Напомню, что СМС отправляются через сервис sms.ru, где необходимо предварительно зарегистрироваться и получить идентификационную строку.

Подробнее об использовании и обработке http get запросов смотрим статью VBS. Как создать и обработать HTTP GET запрос.

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

Скачать архив со скриптом ps1 можно здесь:
HelpDesk.rar
(3.03 КБ) Скачиваний: 74

Вернуться к началу

Alexander A Manaeff -
@Mail.ru .