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 }