Создание файла .bat с телом электронной почты в Powershell

В настоящее время я работаю над сценарием, который будет читать почту от определенного отправителя, который будет отправлять некоторые команды для запуска сценариев.

Главная идея:

Отправитель отправляет письмо с командой, например: ipconfig /all > result.txt, и скрипт, работающий на стороне получателя, копирует эту команду в файл .bat и запускает файл .bat для обработки команды.

Код:

$junk = $routlook.GetDefaultFolder(23)
$MI = $junk.items

foreach($m in $MI)
{
    if($m.SenderEmailAddress -eq '<sender-address>')
    {
        Echo "@ECHO OFF" > com.bat
        Echo $MI.item(1).Body > com.bat
        .\com.bat
    }
    break
}

Ошибка:

введите здесь описание изображения


person Tom Kustermans    schedule 24.02.2016    source источник
comment
Я опубликовал решение, но я надеюсь, что вы знаете о серьезной угрозе безопасности, с которой вы столкнулись?! Адреса электронной почты могут быть тривиально подделаны (как и все остальное, что вы можете использовать для аутентификации), поэтому я не вижу ни одного сценария, в котором это было бы уместно. Чего вы на самом деле пытаетесь достичь?   -  person RB.    schedule 24.02.2016


Ответы (1)


Ваша проблема в том, что вы не указываете кодировку выходного файла.

Самый простой способ это исправить — воспользоваться командлетом Out-File и самостоятельно указать кодировку. Обратите внимание, что 2-й и последующие вызовы Out-File должны указывать параметр -Append, иначе вы перезапишете свой файл.

$> "@ECHO OFF" | Out-File -FilePath cmd.bat -Encoding ascii
$> "Echo hi"   | Out-File -FilePath cmd.bat -Encoding ascii -Append
$> .\cmd.bat
person RB.    schedule 24.02.2016