PowerShell скрипт для отправки смс через GSM модем

Oct 20, 2015 12:19

Шлет через GSM модем. Файл со списком номеров и текстом оправки имеет формат:( +7номер_телефона,текст_смс переход на новую строку)
Можно вшить текст жестко, но у меня через файл так как последняя смс идет контрольная с другим текстом.

[Spoiler (click to open)]
$sms_text_filename = "SMS.txt"
$PathToSmsPrepareToSend = "C:\pw_scripts" + "\" + $sms_text_filename
$dt=Get-Date -Format "dd.MM.yyyy"
# указываем, куда мы будем сохранять журнал событий
$of="C:\pw_scripts\Log\"+$dt+"_LOG.log"
# Проверяем наличие списка сообщений
If (Test-Path $PathToSmsPrepareToSend)
{
$SMS = Import-Csv $PathToSmsPrepareToSend -Header mobile, text
# для каждой строки из списка сообщений
foreach ($SM in $SMS)
{
#проверка чего и куда шлет, в работе не нужно
#$mobileForSMS = $SM.mobile
#$textFroSMS = $SM.text
#echo $mobileForSMS
# Объявляем экземпляр класса SerialPort
$serialPort = new-Object System.IO.Ports.SerialPort
# Устанавливаем переменные настроек порта, к которому подключен модем
<#
!!!Важно!!! USB-модем использует три COM порта. Нам нужен тот, который отображается в Диспетчере устройств в настройках модема. Если воткнуть GSM-модем в другой USB порт, то номер COM порта изменится.
#>
$serialPort.PortName = "COM4"
$serialPort.BaudRate = 115200
$serialPort.WriteTimeout = 1000
$serialPort.ReadTimeout = 3000
$serialPort.DtrEnable = "true"
# Открываем порт
# $serialPort.Open()
# Сохраняем номер телефона и сообщение в переменные
# Удаляем лишние пробелы в номере телефона
$phoneNumber = [Regex]::replace($SM.mobile,'\s','')
$textMessage = $SM.text
try {
$serialPort.Open()
}
catch
{
# Ждём 5 секунд и пытаемся снова
Sleep -Milliseconds 1000
$serialPort.Open()
}
If ($serialPort.IsOpen -eq $true)
{
# Указываем модему, что будем использовать режим AT-команд
$serialPort.Write("AT+CMGF=1`r`n")
Sleep -Milliseconds 1000
# Отправляем данные в модем
# Сначала номер телефона в международном формате
# и символы в конце
$serialPort.Write("AT+CMGS=`"$phoneNumber`"`r`n")
# Даём модему время на обработку
Sleep -Milliseconds 1000
# Записываем в модем наше сообщение
$serialPort.Write("$textMessage`r`n")
Sleep -Milliseconds 1000
# отсылаем в модем Ctrl+Z в качестве завершения сообщения.
$serialPort.Write($([char] 26))
# подождём, пока модем отошлёт сообщение, опытным путем выбрано 3 секунды
Sleep -Milliseconds 3000
}
# Закрываем порт
$serialPort.Close()
if ($serialPort.IsOpen -eq $false)
{
# записываем результат в журнал
$dts=Get-Date -Format "dd.MM.yyyy HH:mm:ss"
$msg=$dts+" :Message "+$textMessage+" send to "+ $phoneNumber
Out-File -FilePath $of -InputObject $msg -Append -encoding unicode
}
Sleep -Milliseconds 1000
} #Конец цикла обработки строки из списка
} #Конец проверки существования списка
Else
# Если списка сообщений не существует
{
# Делаем запись в журнале, что сообщений для отправки не было
$dts=Get-Date -Format "dd.MM.yyyy HH:mm:ss"
$msg=$dts + " :No data to send SMS"
Out-File -FilePath $of -InputObject $msg -Append -encoding unicode
}

работа, powershell, scripts, Полезные штуки

Previous post Next post
Up