• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

Getdocumentbyunid

  • Автор темы Автор темы morpheus
  • Дата начала Дата начала
M

morpheus

Очень часто в скрипте необходимо получиться NotesDocument зная его UNID . И для этого у класса NotesDataBase есть ф-ция Getdocumentbyunid. Вот только заковырка в том что частень эта ф-ция возвращает ошибку ( недоступен по разным причинам )
Предлагаю использовать "обёртку" для этой ф-ции дополнив её обработчиком ошибок и некоторыми проверками

Код:
Function GetDocByUNIDA(db As NotesDatabase, sunid As String) As NotesDocument
On Error Goto err_GetDocByUNIDA
Set GetDocByUNIDA = db.GetDocumentByUNID(sunid)
If Len(GetDocByUNIDA.UniversalID)=0 Then Set GetDocByUNIDA = Nothing ' Проверка что УНИД не пусто
If Not GetDocByUNIDA.IsValid Then Set GetDocByUNIDA = Nothing ' Проверка что валидный
If IsEmpty(GetDocByUNIDA.Items) Then Set GetDocByUNIDA = Nothing ' Проверка что есть итемы
Exit Function

err_GetDocByUNIDA:
Err = 0
Exit Function
End Function

и если документ не доступен или неполноценный то функция тихонько вернёт нам Nothing, и не станет райзить ошибки

Обсуждение
 
из той же темы небольшое замечание насчет проверки на итемы (справедливо и для IsEmpty):
IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items возвращает массив всех полей, потому LS нужно всю доку просканировать.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD