• Как найти причину блокировки аккаунтов в Active Directory?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Включите аудит неудачных попыток входа в систему (через групповую политику) и смотрите в журналах Security событий Windows на КД и на всех серверах, куда пользователи не могут получить доступ.
    Предполагаемая причина, особенно, если у вас принята политика регулярной смены паролей для пользователей - устаревший запомненный пароль на устройствах пользователей. Обучите пользователей самостоятельно смотреть и удалять эти пароли.
    Ответ написан
  • Microsoft Exchange 2016 перестал работать после миграции на другой хост. Как исправить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Чтобы вам помочь по существу, информации откровенно не хватает.
    Для ее получения, во-первых, надо анализировать журналы событий: какие там ошибки и предупреждения, во-вторых - логи IIS. У вас явно что-то с IIS. Запуск служб может не говорить ни о чем: например, вполне может не монтироваться БД (кажется, не ваш случай, но...).
    EMS не работает по понятной причине - он тоже в норме через IIS работает. Но если надо - то можно из Powershell добраться напрямую к Exchange: импортировать в сессию нужный для этого модуль командой
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

    Запускать Powershell для этого надо пользователем, входящим (прямо или косвенно) в группы администраторрв леса и домена, где стоит Exchange, и администратора на самом Exchange, в режиме адинистратора.

    PS Как мигрировали-то? Вопрос, потому что сценарии миграции для виртуализованного Exchange поддерживаются весьма относительно. В частности, миграции через сохранение состояния VM не поддерживаются. Live Migration на Hyper-V поддерживается, на других гипервизорах - надо смотреть.
    Ответ написан
  • Как правильно называть такую композицию классов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    IMHO это - вариант шаблона "Абстрактная фабрика"
    Первая приходящая на ум альтернтатива - та, в которой этот шаблон используется традиционно: реализации наследуются от абстрактного класса фабрики (см. пример для C# в статье по ссылке), а не получаются аггрегированием фактичекой реализации со статическим классом, предостатвляющим интерфейс, как у вас.
    Ответ написан
    Комментировать
  • Не пройдена проверка DFSREvent, как убрать ошибку?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В журнал событий DFSR на DC08 загляните: там должно быть событие с ошибкой или предупреждением.
    Например - если перезагружали другой КД. Вот и смотрите, насколько там что-то серьезное сообщается.
    И да, эта проверка "вылечится" сама через, максимум, сутки - даже если репликация SYSVOL в реальности не работает ;-) .
    Ответ написан
  • Как записать названия папок в массив?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Есть: применить к каждому возвращенному имени папки функцию (статический метод) Path.GetRelativePath и записать результаты в новый массив. Короче всего это записать через LINQ, примерно так:
    String[] rel_folder_names = Directory.GetDirectories(RootFolder).Select(s=>Path.GetRelativePath(RootFolder,s)).ToArray();

    Но если пока не умеете или боитесь использовать LINQ, то можно это сделать в обычном цикле
    String[] full_folder_names=Directory.GetDirectories(RootFolder);
    String[] rel_folder_names = new String[](full_folder_names.Length);
    for(int i=0;i<full_folder_names.Length;i++) {
         rel_folder_names[i]=Path.GetRelativePath(RootFolder,full_folder_names[i]);
    }

    Как-то так.

    PS Весь код написан "из головы", так что ошибки могут быть.
    Ответ написан
    4 комментария
  • Гибридный Exchange, HELO и Ростелеком как победить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    1. Правильно понимаете: всяческие антиспамы традиционно не любят, когда обратное разрешение IP в имя DNS дает не то имя, которое объявляется в HELO/EHLO.
    2. Если сервер у вас принимает почту из интернета напрямую, без Edge, то надо создать для этого специальный Receive Connector, чтобы почта из интернета воспринималась, как приходящая на него. Обычно этот Receive Connector привязывается к IP внешней сетевой карты (надеюсь, у вас есть такая?). Процедуры, в целом, описаны в документации: https://learn.microsoft.com/en-us/exchange/mail-fl...
    Ответ написан
    Комментировать
  • Большая очередь Exchange server 2016. Как исправить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я тут у вас на скриншоте не вижу никакой большой очереди. Вижу некоторое количество пустых очередей отправки на конкретные домены. Такие очереди живут после последней отправки нескоторое время (ради оптимизации - чтобы не создавать заново очередь для следующих сообщений в этот домен)
    Если у вас отправки в эти домены быть не должно, то причина может быть в том, что, как написал предыдущий автор, у вас отправляются NDR (отчет о недоставке) о несуществующем пользователе. Кстати, такие отчеты могут использоваться и для рассылки спама (так как адрес, куда идет отчет, контролирутся отправителем), так что рекомендую посылку их внешним получателям отключить (в Exchange Management Console): Set-RemoteDomain * -NDREnabled $false
    PS Настроить антиспам тоже будет не вредно.
    Ответ написан
    Комментировать
  • Откуда stackoverflow при работе с stackalloc c#?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Похоже (явного указания в документации я не нашел), что память в стеке освобождается только при выходе из всего метода, но не из блока внутри него. Освобождение памяти в стеке, как известно - это сдвиг указателя стека обратно, и похоже, этого в конце блока не происходит - только в конце метода. Косвенное подтверждение - в документации по stackalloc явно написано избегать вызовов stackalloc в цикле, как это у вас сделано: "Avoid using stackalloc inside loops. Allocate the memory block outside a loop and reuse it inside the loop." ( https://learn.microsoft.com/en-us/dotnet/csharp/la... )
    Ответ написан
    Комментировать
  • ASP.NET Core 6 Как устранить ошибку при выполнении команды update-database?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    'MultipleActiveResults=True'

    Уберите эти одинарные кавычки.
    Ответ написан
    Комментировать
  • Как реализовать расширяемость модулей с использованием интерфейсов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я бы в такой задаче попробовал сделать архитектуру, основываясь на виртуальных базовых классах - т.е. множественном наследовании, при котором многократно наследуемый класс везде, где он возникает, определяется как виртуальный базовый. Как известно, если класс (напрямую или через своих предков) многкратно наследует некий класс как виртуальный, то при содании экземпляра такого класса создается только один экземплярэтого базового класса.
    В частности, с помощью виртуального абстрактного базового класса, содержащего только чистые виртуальные методы, вполне можно сделать аналог интерфейсов, существующих в других языках: Java, C# и пр. - и пользоваться в C++ архитектурными наработками, сделанными с использованием интерфейсов.
    Ответ написан
    Комментировать
  • Почему ADFS бесконечно запрашивает логин и пароль?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Никто не сталкивался с тем что ADFS бесконечно запрашивает логин и пароль?

    Ну, я сталкивался - когда свой самописный модуль 2FA отлаживал. Только вряд ли вам это знание поможет: сомневаюсь, что вы занимаетесь именно этим, так что причина другая.
    А какая именно - это вам нужно в журнал событий смотреть: прежде всего - в журнал Applications and Serices Log/AD FS/Admin: ошибки пишутся туда. Если вы пользуетесб браузером, но ошибка, скорее всего будет иметь код 364 ("Encountered error during federation passive request.") Но это ошибка общего характера, причину ее надо смотреть в дополнительных данных.
    Ну, а ещё может помочь журнал событий Security- на Сервере AD FS и, возможно, на КД: смотрите, нет ли там ошибок в момент неудачной попытки (возможно, потребуется предварительно включить аудит этих ошибок, смотрите групповые политики, как там у вас настроен аудит).
    Ответ написан
    Комментировать
  • Реализовать ajax в asp dot net core 6?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вы умеете отправлять и получать запрос с фронта в формате JSON на голом JS через XMLHttpRequest или fetch (либо у вас есть фронтовой фреймворк для этого), то вам повезло: сама Microsoft о вас позаботилась. Как раз в ASP.NET 6 появился Minimal API. Суть его в том, что если раньше базовые делегаты-обработчики конечных точек маршрутизации (подключаемые через Map/MapGet/MapPost etc) должны были иметь тип RequestDelegate (HttpContext context на входе, Task на выходе, а в context.Response изволь писать сам), то теперь делегаты-обработчики могут иметь произвольный тип (ну, почти): принимать произвольное количество произвольных параметров - ASP.NET привяжет их к путям/параметрам в URL и содержимому тела запроса как надо - и возвращать произвольный объект в качестве результата - он будет правильно записан в context.Response: например, если это обычный объект, то он будет послан как JSON. То есть, Minimal API - это новый способ написания контроллеров API, безо всякого MVC.
    Что касается вашего вопроса: если вы передадите с фронта через XHR/fetch объект в JSON с полями и значениями в них, то ASP.NET привяжет параметры метода-обработчика к одноименным полям объекта, а объект, возвернутый из метода-обработчика, закодирует в JSON. И никакого дополнительного фреймворка не надо.
    Подключаются эти обработчики все теми же методами Map/MapGet/MapPost etc: просто в качестве делегата передаете не RequestDelegate а нужный метод-обработчик.
    Но есть нюанс: в документации по ASP.NET 6 все это великолепие еще толком не описано - читайте документацию по ASP.NET 7: она в целом подходит, только не испольуйте группы маршрутизации и фильтры - их в ASP.NET 6 ещё не было.
    PS Кому интересно: как это работает под капотом(конкретно для ASP.NET 7), описано в серии статей Эндрю Лока (знаете такого автора книжек по ASP.NET?).
    Ответ написан
  • Миграция группы серверов windows 2003 на 2019?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    С 2003 на 2019 домен AD напрямую мигрировать не получится: 2019 уже не поддерживает репликацию SYSVOL по протоколу FRS, а только по DFSR, а 2003 SYSVOL по DFSR реплицировать ещё не умеет. Придется вместо 2019 ставить пока 2016 максимум, заменять 2003 на них, а далее - как положено, мигрировать репликацию SYSVOL на DFSR (только аккуратно, по шагам, а не сразу в конечную стадию) , повышать уровень домена и леса до 2016 и заменять 2016 на 2019.
    Ответ написан
    Комментировать
  • MX host not resolved как побороть?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Винить - однозначно владельца зоны, в которой должны быть MX.
    Копать - в сторону содержимого зон на каждом из полномочных для нее серверов DNS(их список определяется командой nslookup -type=ns имя.домена ):
    командой nslookup -type=mx имя.домена имя.сервера
    Думаю, что где-то у них нарушена синхронизация содержимого зон.
    PS А почему на родном зеленом нет такого вопроса? С ПП поссорились?
    Ответ написан
  • Почему сервер не разрешает [delete] метод (ошибка 405)?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Общий ответ - какой-то другой обработчик перехватывает запрос.

    Конкретный ответ зависит от того, как хостится приложение и от остального его кода. Если приложение работает через IIS(хостится на нем или опубликовано через него), то этим обработчиком часто является модуль WebDAV, и его надо отключить. Самый простой вариант, как это сделать - второй ответ этого вопроса: https://stackoverflow.com/questions/55736265/getti..., подробности, если интересно - https://learn.microsoft.com/ru-ru/aspnet/web-api/o...
    Ответ написан
  • Как адаптировать MapPost в метод ControllerBase?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вынесено из комментариев (не туда запостил):

    Если бы я был контроллером API на MVC, я бы тоже так же ответил: "что за фигню вы мне прислали?" (в протоколе HTTP это обозначается кодом статуса 400).
    Контроллер API ждет, что вы ему пришлете, нечто, содержащее значение для параметра message вашего метода действия. Если вы посылаете в формате JSON, то - объект с полем message: тогда он привяжет значение этого поля входному параметру метода действия, который имеет то же имя message, как у вас.
    Потому в запросе POST надо слать объект с этим полем. Например - в уже сериализованном (строковом) формате:
    string content = "TestContent";
    Но можно в качестве content использовать и объект с полем message, например - анонимного типа:
    var content = new { message = "TestContent" };
    - PostAsJsonAsync сумеет превратить это в JSON.

    И да, к контроллеру на Minimal API из вашего первого комментария все это точно так же относится.
    Ответ написан
    Комментировать
  • У меня C# visual stiudio code в коде я пытаюсь отправить текст но появляется все равно hello, world что делать?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Меня смущает имя вашего класса: Programs. Посмотрите, нет ли у вас в проекте класса Program (без 's')? ;-)
    Ибо выполнение программы начинается с метода Main класса Program.
    Ответ написан
    Комментировать
  • Нет доступа к общей папке на сервере в доменной сети?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Первая проверка (на проблемы с Kerberos): есть ли доступ к этой папке, если вместо имени сервера использовать его IP?
    Если дело не в этом, покажите разрешения на папку. Их можно вывести в консоль командной строки командой icacls <имя_папки> (или даже icacls . если перейти в эту папку). Содержимое консоли можно скопировать в буфер обмена (выделить мышкой и нажать Enter) и потом вставить в ответ в текстовом виде.
    Ответ написан
    Комментировать
  • Как инициализировать диск без потери данных?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Попробуйте импортировать диск
    PS Предварительно лучше сделать резервную копию.
    Ответ написан
  • Как запустить Windows XP x86 (32-bit) с GPT-диска?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Ответ: никак (разве что вы перепишете часть ядра XP, которая работает с томами на диске, а также - загрузчик). Как нам сообщает "Windows and GPT FAQ", диски GPT поддердиваются только в WinXP 64-bit (которая основана на коде Win2K3 Server 64-bit, а не на коде обычной WinXP) и только как диски с данными: ни загрузка с них, ни размещение на них папки WINDOWS не поддерживаются.
    Ответ написан
    Комментировать