• Firefox - как зайти пол двумя разными аккаунтами, чтоб не было разлогина на одном?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В Firefox есть штатное расширение для этого: Firefox Multi-Account Containers
    Ответ написан
    2 комментария
  • Как десериализовать простой Json в массив?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Используйте LINQ:
    Если поле code в типе, получаемом после десериализации имеет тип int (по уму должно быть так, но я с NewtonSoft JSON не работал, поэтому не уверен в таких подробностях), просто допишите к выражению для десериализации
    .Select(x=>x.code).ToArray();
    Если тип, паче чаяния, другой - преобразуйте результат, возвращаемый лямбда-функцией в Select к int (для строки это будет Int32.Parse(x.code)
    Ответ написан
    Комментировать
  • Как опубликовать программу?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Подключите нужные библиотеки времени выполнения (в вашем списке в комментарии к вопросу я других не вижу) статически: https://learn.microsoft.com/cpp/build/reference/md...

    PS А можете, как написал выше rPman, скачать и установить на целевом ПК нужный vcredist. И да, соберите свою программу в конфигурации Release - возможно, вам vcredist самому ставить и не понадобится, ибо он там уже есть (изначально или кто-то до вас поставил).
    Ответ написан
    Комментировать
  • Как подключить пользователей к серверу AD в другой подсети?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Проверьте (например, командой ping) на сервере AD разрешение имен DNS для сайтов, которые находятся в интернете. Если оно не работает - настройте так, чтобы оно работало. Как именно настроить - завист от причины. Например, если запросы DNS наружу от сервера AD режутся у вас на маршрутизаторе - разрешите их: сервер DNS на сервере AD по умолчанию уже настроен на поиск в DNS, начиная с корневых серверов, и дальше в соответствиеи с делегированием, а чтобы этот поиск работал, нужно чтобы запросы проходили.
    Если запросы DNS к посторонним серверам (кроме своего) режет провайдер - настройти на сервере DNS для AD в его свойствах безусловную пересылку на сервер DNS провайдера.
    Ответ написан
    Комментировать
  • Задваивается доменное имя в DNS запросе?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я так понимаю у меня не находит сервис из-за задваивания "looch.local" в запросе.

    Наоборот, запрос к имени с к нему дописанным суффиксом домена ("задваивание") происходит потому, что перед этим на запрос к самому имени клиенту приходит ответ, что имя не найдено.

    Как я понял, у вас это 172.16.128.1 - это микротик? Если да, тогда подозреваю, что его адрес отдавается по DHCP клиентам в качестве второго сервера DNS, а на самом микротике условная пересылка запросов к домену AD DNS на контроллер домена AD (КД) не настроена. Так? Если так (это - распространенная ошибка), то либо уберите микротик из списка серверов DNS, либо настройте на нем нужную условную пересылку (если это возможно и если вы это умеете). Потому что клиент, в какой-то момент может переключиться на этот второй сервер DNS на микротике (например, при сбое при обращении к DNS на КД), а микротик ничего про ваш домен AD не знает - вот и получается эта ошибка.
    Ответ написан
  • 2 Exchange Server в разных лесах и 1 Outlook?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Немного теории по поводу отбойников с адресами, начинающимися на "IMCEAEX" Это - адеса формата X.500(содержимое атрибута legacyExchangeDN в каталоге), преобразованные в формат SMTP. Их наиболее вероятный источник - локальный кэш адресов Outlook, используемый при автозаполнении адреса (он запоминает адреса внутренних получателей именно в формате X.500). Такие ошибки могут встречаться и в рамках одного леса - если этот атрибут по каким-то причинам поменялся)
    Простейший способ борьбы: проинструктировать пользователей по получении такого отбойника выбрать нужный адрес из Голобальной адресной книги - это достаточно сделать один раз. Можно еще также в поле адреса в новом письме в Outlook начать набирать адрес, получить автозаполнение из кэша и удалить его (ЕМНИП - через локальное меню по правой кнопке).
    Можно ещё почистить кэш автозаполнения (в старых версиях он был в файлах .nk2 в папке Outlook, но, по слухам, в более новых версиях это могло поменяться).
    Ответ написан
    Комментировать
  • Как называется (термин) предельное число в счетной системе континуумного типа?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы про точную верхнюю грань последовательности (супремум)? Обозначается она символом sup.
    Ответ написан
    Комментировать
  • Как правильно и удобно читать данные из БД?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Думаю, что надо раскрыть подробнее тему предыдущих ответов и комментариев.
    Проблемы со сложностью у вас, потому что вы не используете современые средства .NET и C#.
    В .NET исторически сложилось несколько слоев API для обеспечения параллельной работы, и использование функций обратного выдова - самый старый и самый громздкий из них. А самый удобный и современный - это Task Parallel Library (TPL): он, плюс конструкции языка C# async/await, позволяет писать такой асинхронно выполняющийся код так, будто он выполняется синхронно.
    Скорее всего (я просто не уточнял, потому пишу так) для SQLite есть асинхронный API и для использования с TPL, и API для синхронного использования, что ещё удобнее - и он должен быть не менее быстрым чем синхронная работа с файлами, потому что это встроенная БД.
    Но если вы по каким-то причинам будете работать с асинхронным API на функциях обратного вызова, то тут тоже есть способ упростить код: транслировать вызовы такого API для использования его со средствами TPL. Для этого используйте объект типа TaskCompletionSource (в вашем случае - обобщенный, специалиированный вашим типом результата: TaskCompletionSource<int>
    У этого объекта есть свойство Task, возвращающее задачу, состоянием котрой можно управлять с помощью методов этого объекта - SetResult и других, вызывая эти методы в функциях обратного вызова (AKA callback). Как это делать - см. пример по ссылке.
    А с Task, каким бы способом вы его не получили, вам будет работать значительно удобнее: если пометить метод, в котором вам надо работать с БД как async (в современном C# так можно пометить даже Program.Main), то в этом методе можно будет использовать для получения значения операцию await
    TaskCompletionSource<int> tcs1=new TaskCompletionSource();
    //... операции по по настройке tcs1 и запуску первого чтения из БД
    int numberFromBase1 = await tcs1.Task.ConfigureAwait(false);
    TaskCompletionSource<int> tcs2=new TaskCompletionSource();
    //... операции по по настройке tcs2 и запуску второго чтения из БД
    int numberFromBase2 = await tcs2.Task.ConfigureAwait(false);
    int summ =  numberFromBase1 + numberFromBase2;
    return summ;

    Вызов ConfigureAwait(false) здесь нужен для избежания блокировок в некоторых контекстах синхронизации (приложения Windows Forms, WPF и др.). Если же у вас программа выполняется вне специфического контекста синхронизации - консольное приложение, приложение ASP.NET Core и др., - то этот вызов не обязателен.
    Компилятор, увидев операцию await, преобразует метод нужным образом, так, чтобы он выполнялся асинхронно, передавая управление другим задачам во время ожидания (т.е. до выполнения функции обратного вызова) и возобнавлял выполнение по его завершении -и вам думать об этом и писать нужный для этого код будет не нужно.
    Такой метод вернет Task (возможно - ещё до завершения всех операций) и с его результатом можно что-то сделать: либо получить его опять чере await асинхронно, либо дождаться завершения асинхронных операций с получением результата через вызов метода Task<int&gt.GetAwaiter().GetResult() (есть другие варианты, но этот IMHO лучше всего в плане обработки исключений).
    Ответ написан
    Комментировать
  • Как именно должжна работать функция SetCursor?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Ну, не так может быть то, что курсор назначаен на уровне класса окна (задается при регистрации класса приложением, но можно изменить и после) - тогда при движении мыши система заменяет ваш курсор на зарегистрированный. Подробности читать тут.
    Ответ написан
    Комментировать
  • Как удалить строки, полученные подзапросом с фильтрацией и сортировкой?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Как известно, в однотабличном запросе - ровно одна таблица в FROM, без JOIN, подзапросы (в скобках) не в счет - удалить строки, которые выбирает оператор SELECT не просто, а очень просто: достаточно заменить SELECT (со списком полей) на DELETE.
    Ваш запрос, начиная со второй строчки, можно преобразовать к такому виду: в FROM указать имя самой таблицы, а отбор строк сделать через подзапрос в разделе WHERE. Если в таблице есть первичный ключ из одного поля, то это делается проще всего через подзапрос для ANY, выбирающий нужный первичный ключ , а в общем случае это делается через подзапрос для EXISTS. Существующее условие WHERE надо перенести в подзапрос. А потом - просто заменить первую строчку на DELETE.
    Ответ написан
  • Почему сетевые клиенты (PXE) загружаются со старого сервера после изменения настройки в микротике?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Сервер, выдающий загружаемые образы для PXE, часто сам отвечает по DHCP на соответсвующие запросы, которые рассылаются через широковещание.
    Так что, смотрите настройки старого сервера.
    Ответ написан
    1 комментарий
  • Получить вывод команды командной оболочки в переменную makefile?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В командной строке:
    for /F %i in ('powershell.exe $PSVersionTable.PSVersion.Major') do set PSVER=%i

    Если вставляете в командный файл - замените %i на %%i
    Ответ написан
  • Как ограничить вывод?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Powershell работает с объектами и фильтровать надо объекты. По факту вы хотите получить элементы свойства Access и отфильтровать их - вот и пишите этот фильтр явно, а потом преобразовывайте выдачу в нужный вам формат . Для одного субъекта это делается примерно так(выдачаформатируется так же, как и у вас):
    (Get-Acl \\addr\addr).Access | Where {$_.IdentityReference -ne 'Домен\Группа'} | ForEach ([String]$_.IdentityReference, String]$_.AccessControlType, [String]$_.FileSystemRights) -join ' '}

    Чтобы отфильтровать несколько групп либо добавьте в команду Where дополнительные аналогичные условия, объединив их по && , либо добавьте команды Where для каждой такой группы
    Теоретически, можно отфильтрофать и результат команды Format-List, которой вы пользуетесь, но это сложнее: она возвращает не строки, а весьма нетривиальные объекты, которые потом формируют выдачу
    Ответ написан
    2 комментария
  • Ошибка репликации, как победить?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Похоже, у вас, на самом деле, всё нормально.
    Другое название папки на Win2012 - это след давней миграции репликации SYSVOL с FRS на DFSR.
    Код ошибки 0x800706e4 при проверке сервера Win20212 c Win2019 означает "Запрошенная операция не поддерживаяется" - т.е. налицо некоторая несовместимость версий по диагностическим механизмам, этим можно пренебречь, а состояние Win2012 - проверить с него самого.
    Не прошедший тест DFS Replications означает всего лишь то, что в журнале событий этой службы были ошибки и предупреждения. Посмотрите, какие были. Ошибки и предупреждения могут появляться и при нормальной работе репликации: например, при перезагрузке другого КД (ошибка потеря связи с ним) или при резервном копировании КД (предупреждение о заморозке записи в БД репликации в момент создания теневой копии системного тома).
    Для того, чтобы упокоиться, можете выполнить опрос состояния репликации на КД через WMI (из командной строки в режиме администратора):
    For /f %i IN ('dsquery server -o rdn') do @echo %i && @wmic /node:"%i" /namespace:\\root\microsoftdfs path dfsrreplicatedfolderinfo WHERE replicatedfoldername='SYSVOL share' get replicationgroupname,replicatedfoldername,state

    Числа в state означают следующее:
    0 = Uninitialized
    1 = Initialized
    2 = Initial Sync
    3 = Auto Recovery
    4 = Normal
    5 = In Error
    Ответ написан
    Комментировать
  • Как установть обновление windows10.0-kb5010414-x64 на Windows 10?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Наверное, только если обновить Windows 10 до Winows 11 ;-) : в Knowledge Base написано, что это обновление предназначено для Windows 11
    Ответ написан
    Комментировать
  • Нужно ли знать многопоточность и асинхронность в c#, чтобы начать учить asp.net?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Мое мнение: есть некоторая неопределенность для ответа. С одной стороны, при решении типовых задач с помощью базирующихся на ASP.NET Core фреймворках высокого уровня - MVC, Razor, Minimal API, Blazor (за последний не совсем уверен, правда), с асинхронностью и многопоточностью вы сталкиваться будете не сильно и не часто, потому что в них приложены усилия, чтобы изолировать разработчика от связанных с этим трудностей - короче, потребуется разве что, умение использовать async/await. Но в целом ASP.NET Core - это фреймворк асинхронный и многопоточный, поэтому для более плотной работы с ним понимание асинхронность и многопоточность и связанные с ней знания (например, про примитивы синхронизации, состояние гонок и т.п.) может быть полезно, иногда - например, если вы захотите использовать объекты, к которым возможен доступ из нескольких веб-запросов параллельно - просто необходимо.
    Короче, мое мнение: начинать изучать перечисленные фреймворки высокого уровня можно и без особых знаний про асинхронность, достаточно научиться использовать await в async-методах (это просто). Но в дальнейшем тему асинхронности и многопоточности надо вкурить, чтобы можно было работать смелее и свободнее, выходя за рамки фрейворка, и не допускать при этом труднообнаружимых ошибок.
    Ответ написан
    Комментировать
  • C#, обработка исключений, почему нельзя обратится к свойству, через имя класса?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    если я не хочу создавать переменную

    А вы её и так, и так не создаете: экземпляр исключения создается при возбуждении исключения (помните синтаксис - throw new Exception() )? А вот чтобы обратиться к полям/свойствам/методам этого экземпляра, надо дать ему имя в конструкции catch и обращаться к нему по этому имени. А при указании в качестве имени экземпляра имени класса, вы, как выше вам написал Василий Банников , как и в любом другом месте, обращаетесь к статическому полю (или свойству) этого класса. Такой вот синтаксис у языка C#: обработчик исключения у него - это обычный блок, никаких специальных соглашений там нет( пока что, по крайне мере ;-) ).
    Ответ написан
    2 комментария
  • Сменилась ip адресация. Перешла на ip v6. Что могло быть причиной?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Чтобы выяснить причину, надо смотреть.
    1. Что у вас выдает местный сервер DHCP, cмотреть - командой ipconfig с командной строки и/или GetNetIPAddresses из Powershell
    2. Посмотрите, во что у вас разрешаются нужные вам имена домена Resolve-DnsName имя (в powershell)
    3. Если у вас часть инфраструктуры (AD, DNS) связана с головной организацией - переадресуйте этот вопрос им.

    4. Если зона rcss.local - это ваш домен AD, и доступ к домену сломался из-за DNSSec (ну да, кто-то проспал срок действия подписей) , и вы управляете локальным сервером DNS, то можно для восстановления работы отключить на нем проверку DNSSec (в Windows Server это делается в свойствах сервера, там есть галочка).
    Ответ написан
    Комментировать
  • Зависит ли какой указан SSL-порт для работы SMTP соединения сайте?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вас, как я понял, интересует, нужен ли серверу другой сертификат для подключения по другому порту через другой протокол, то ответ - не нужен: сертификат выдается для использования указанного в нем имени DNS хоста(одного или нескольких) , порт при этом может быть любым.

    PS В SMTP есть два механизма передачи по зашифрованному каналу:
    1. По установленному заранее соединению SSL (обычно называется "SMTP over SSL" или SMTPS, обычно используется порт 465)
    2. Переходом от незашифрованного соединения к зашифрованному по команде SMTP STARTTLS ("SMTP Service Extension for Secure SMTP over TLS", используются те же порты (587 - клиентское подключение, 25 - сервер-сервер)

    Клиенты (MS Outlook, к примеру) для использования этих разных механизмов требуют разных настроек.
    И сервер и клиенты SMTP вполне могут не поддерживать один из этих механизмов (например, потому что SMTPS какое-то время считался устаревшим).
    Ответ написан
    Комментировать
  • Как опубликовать решение на GitHub без перезаписи существующей ветки?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Я правильно понимаю, что результат нужно публиковать в том же репозитории, но в своей ветке?
    Если так, то создайте себе локально такую ветку на основе вашей локальной main с переходом в нее (git checkout -b ветка ) и пошлите в репозиторий (git push -u origin ветка) уже её.

    Если нужно публиковать результат как-то иначе - уточните, как именно: сначала - для себя, у автора теста, заетем - здесь в комментарии.
    UPD: Написал команду git push целиком.
    Ответ написан