Kud93
@Kud93
Стараюсь стать лучше

[PowerShell] Как отправить СМС в кириллице через GSM модем?

Всем доброго времени суток. Я новичок в этом деле, так что прошу помощи.
У меня есть скрипт на отправку СМС через USB модем.
Вот отрывок:

If ($serialPort.IsOpen -eq $true) {
$serialPort.Write("AT+CMGF=1`r`n")
$serialPort.Write("AT+CMGS=`"$Number`"`r`n")
Start-Sleep -Seconds 1
$serialPort.Write("$Message`r`n")
$serialPort.Write($([char] 26))
<#
$time = Get-Date -Format "
[HH:mm:ss] [dd/MM/yyyy]"
$TextBoxlog1.text = $TextBoxlog1.text+$0+$2+
$time
$TextBoxlog1.Select($TextBoxlog1.TextLength, 0)
$TextBoxlog1.ScrollToCaret()
#>
Start-Sleep -Seconds 5
}

СМС на латыне отправляется прекрасно. Пытался отправлять на кириллице, принимает только вопросы. Уверен в кодировке проблема.
Прописывал в скрипт:

$serialPort.Write("AT+CSCS=`"UCS2`"`r`n")

модем затыкается и не оправляет сообщение.
Также пробовал изменить команду
$serialPort.Write("AT+CMGF=1`r`n")
на
$serialPort.Write("AT+CMGF=0`r`n")
Результата не дало.
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 3
@MaxKozlov Куратор тега PowerShell
С модемами и СМС не работал, но
попробовать поэкспериментировать с перекодированием сообщения перед отправкой можно с помощью таких функций

function Get-TextEncoding ($Encoding) {
		switch -regex ($Encoding) {
			'default' {
				[System.Text.Encoding]::Default
			}
			'utf8' {
				[System.Text.Encoding]::UTF8
			}
			'oem' {
				[System.Text.Encoding]::GetEncoding(
					(Get-Culture).TextInfo.OEMCodePage
				)
			}
			'ansi' {
				[System.Text.Encoding]::GetEncoding(
					(Get-Culture).TextInfo.ANSICodePage
				)
			}
			'^\d+$' {
				[System.Text.Encoding]::GetEncoding([int]$Encoding)
			}
			default {
				[System.Text.Encoding]::GetEncoding($Encoding)
			}
		}
}
function Convert-TextEncoding {
param (
	[Parameter(ValueFromPipeline=$true,Position=0)]
	[String[]]$InputObject,
	[Parameter(Mandatory=$true,Position=1)]
	[string]$FromEncoding,
	[Parameter(Mandatory=$true,Position=2)]
	[string]$ToEncoding
)
BEGIN {
	try {
		$FE = Get-TextEncoding $FromEncoding
		$TE = Get-TextEncoding $ToEncoding
	}
	catch {
		throw
	}
}
PROCESS{
	foreach ($s in $InputObject) {
		if ($s) {
			$TE.GetString($FE.GetBytes($s))
		}
		else {
			$s
		}
	}
}
}
# Например, читабельный вывод из удалённо выполняемых консольных приложений я получаю так:
# Invoke-Command -ComputerName remoteComp { dism /online } | Convert-TextEncoding -FromEncoding 1251 -ToEncoding 866
Ответ написан
Комментировать
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Прочитайте про PDU формат СМС.
При передаче латиницей, в АТ команду Вы вводите текст.
При передаче кириллицей, необходимо произвести перекодировку всех символов сообщения по хитрому алгоритму.
Не забудьте потом в АТ команде переключить формат передачи текс/PDU
Ответ написан
Комментировать
Kud93
@Kud93 Автор вопроса
Стараюсь стать лучше
Ничего лучше не нашёл, как использовать код С# для кодировки UCS2.
Если у кого есть готовый шаблон для отправки СМС через GSM с помощью Powershell, просьба поделиться =).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы