Добавление метки защиты информации Azure в сценарий Powershell с помощью Outlook 2016 - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь добавить собственный заголовок для msip_labels AIP в сценарий Powershell, который я пишу. Я выяснил, как сделать это с .Net.SMTP, используя:

$message.Headers.Add("msip_labels","MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId ffffffff-5555-6666-7777-888888888888; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method Manual")

На основании проведенного исследования, это должно работать с использованием Outlook 2016 в теории:

$Outlook = New-Object -ComObject Outlook.Application
$message = $Outlook.CreateItem(0)

$message.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/msip_labels", "MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application=Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId=ffffffff-5555-6666-7777-888888888888; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method=Manual")

$message.To = "user1@domain.tld"
$message.Cc = "user3@domain.tld"

$message.Subject = "Report"
$message.HTMLBody = @"
<p><font face = "Calibri" size = "3">Hello World</p></font>
"@

$reportMessage.Send()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Outlook) | Out-Null

Я подтвердил это, используя средство просмотра MAPI, что это то, что используется в самом Outlook с другими электронными письмами, которые я отправлял, используя только Outlook. Но, когда я попытался запустить это в своем скрипте, я получаю эту ошибку:

Exception setting "SetProperty": Cannot convert the "MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Enabled=True; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SiteId=00000000-1111-2222-3333-444444444444;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Owner=user2@domain.tld; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_SetDate=$((Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ")); MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Name=Internal;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Application=Microsoft Azure Information Protection; MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_ActionId=ffffffff-5555-6666-7777-888888888888;
MSIP_Label_aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee_Extended_MSFT_Method=Manual" value of type "string" to type "Object".
At C:\emailtest.ps1:21 char:1
+ $message.PropertyAccessor.SetProperty("http://schemas.microsoft ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : RuntimeException

Что, кажется, не имеет особого смысла, это предполагается, что это строка в схеме MAPI, поэтому я не уверенпочему он думает, что это должен быть объект. Я даже пытался преобразовать эти значения в объекты, используя ConvertFrom-String, но это не сработало. Любой совет по этому вопросу будет принята с благодарностью.

1 Ответ

0 голосов
/ 11 октября 2019

Попробуйте уменьшить длину строки, которую вы передаете в качестве значения. Работает ли он правильно?

Кажется, вам нужно использовать низкоуровневый API, на котором основан Outlook - Extended MAPI. Он не имеет никаких ограничений на длину строки в отличие от OOM, если вы используете метод OpenProperty. Кроме того, вы можете рассмотреть возможность использования любой сторонней оболочки вокруг этого API, например Redemption.

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

  • Тело и содержимое вложения элементов Outlook не доступны через PropertyAccessor.
  • PropertyAccessor игнорируетсялюбые секунды значения даты / времени. Свойства строки ограничены по размеру в зависимости от типа хранилища данных.
  • Ограничение: файлы личных папок (.pst) и файлы автономных папок Exchange (.ost) не могут превышать 4088байт.
  • Ограничение: Для прямого онлайн-доступа к почтовому ящику Exchange или иерархии общих папок ограничение составляет 16 372 байта.
  • Двоичные свойства могут быть получены или установлены только те, чьи значения меньше 4088 байт. (При попытке использовать большие значения вы получаете ошибку нехватки памяти).

Вы можете найти Не спотыкайтесь о камень, работающий с классами PropertyAccessor и StorageItem вOutlook 2007 статья полезна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...