Задать вопрос
  • Причины медленной работы DNS в ЛВС?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Уберите 8.8.8.8 из всех списков серверов DNS на всех клиентах, которым нужно обращаться к домену (на NAS, в частности). Этот сервер почти наверняка не способен разрешать имена ваших КД в IP вашей локальной сети (подробности разных сценариев опускаю). По умолчанию DNS на КД вполне способен справляться с разрешением всех имен (и из интернета - тоже, через корневые сервера). Если это вдруг не так - кто-то (ваш маршрутизатор или провайдер) почему-то блокирует исходящие запросы DNS с КД - настройте на них пересылку запросов на внешний сервер DNS, запросы на который не блокируются (например, тот же 8.8.8.8).
    PS Если маршрутизатору не нужно обращаться к домену (в том числе - если он настроен как DNS Proxy для локальной сети), то 8.8.8.8 можно оставить, чисто на случай отказа всех КД.
    Ответ написан
    1 комментарий
  • Какой из вариантов схемы базы данных лучше?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если я правильно понимаю (мало ли, вдруг есть какие-то стандарные коробки, контейнеры и т.д), то массогабаритные харастеристики груза отдельной сущностью не являются. Так что первый вариант противоречит подходу "сущность-связь" и тем самым плох.
    Второй вариант годится, если каждый отдельный груз с одинаковыми массогабаритными характеристивами не является отдельной сущностью (т.е. других различающихся атрибутов у таких грузов нет и никогда не будет). Только тогда всю совокупность таких грузов можно считать отдельной сущностью, а потому - объеднить в одну запись с указанием количества. Стоит ли такая оптимизация снижение гибкости из-за введения указанного выше ограничения - решать вам. Но есть общее правило - не делать преждевременных, невынужденных оптимизаций, если они вызывают побочные эффекты. А эта, как выше указано - вызывает.
    Ответ написан
  • Как исправить "Input string was not in a correct format."?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Полагаю, вы хотели подставить между знаками процента значение из поля ввода (txtSearch.Text), которое передается в string.Format? В таком случае надо между фигурным скобками подставить порядковый номер параметра (он начинается с 0): string.Format("%{0}%", txtSearch.Text)

    PS Из соображений безопасности (чтобы избежать SQL-инъекции) крайне не рекомендуется напрямую копировать в строку запроса сырые, непроверенные, данные из ввода пользователя - а вы сделали именно так. В учебной задаче это допустимо, но лучше сразу привыкать делать по уму: например, использовать в строке запроса параметры и передавать ввод через них.
    Ответ написан
    Комментировать
  • Возможно ли передать параметром экземпляр HttpClien в другой класс?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Рекомендуемые варианты использования есть в документации Microsoft. Краткая цитата оттуда:
    Чтобы суммировать рекомендуемое HttpClient использование с точки зрения управления временем существования, следует использовать либо долгосрочные клиенты, либо задать PooledConnectionLifetime (.NET Core и .NET 5+) или краткосрочные клиенты, созданные IHttpClientFactory.

    Как видите, один клиент на все приложение (т.е. долгосрочный) - это только один из вариантов. Выбирайте тот вариант, который вам больше подходит (они все там описаны в документации, рядом) и пользуйтесь.
    Ответ написан
    2 комментария
  • Как настроить маршрутизацию?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вам, если правильно сформулировать задачу технически, требуется переадресация на основании имени узла в (заголовке Host протокола HTTP(S)), к которому производится подключение. Это обычно маршрутизацией не называют, а ПО, которое умеет это делать, чаще всего называют "обратный прокси-сервер". Теоретически оно может быть установлено и на домшнем маршрутизаторе, если он - достаточно мощный, или - на NAS, но и тут, и там надо смотреть про конкретную модель. Если походящих вариантов не найдется, то придется устанавливать обратный прокси-сервер на ПК (нужное ПО есть и под Windows, и под Linux), но в таком случае ПК должен быть всегда включен. Или - ещё на чем-то постоянно включенном.
    Ответ написан
    3 комментария
  • Почему групповая политика применяется, но параметры фактически не прописываются?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Смотрите подробный отчет, который можно получить ключом /H
    gpresult /h file.htm
    Ответ написан
    3 комментария
  • Как можно балансировать SMTP по адресу получателя?

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

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вы не инициализуете сами массивы (не содаете для них объекты типа Inline_Keyboard[]) нижнего уровня: rootobject.inline_keyboard[0] и rootobject.inline_keyboard[1]. Ну, и rootobject.inline_keyboard[2] тоже стоило бы создать IMHO.
    Ответ написан
    Комментировать
  • Почему не находит файл C# в csc?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Имя_файла.cs ищется относительно вашего текущего каталога - того, в котором вы находились, когда ввели команду с csc.exe. Его имя пишется в приглашении командной строки. Вот и посмотрите, из какого каталога вы запускаете команду, и есть ли там нужный файл.
    Ответ написан
  • Создание второй MX записи?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    А для чего будет использоваться второй сервер? Если чисто для приема почты с клиентов и отправки ее дальше (например, ради отказоустойчивости), то ему запись MX вообще не нужна. MX - это для других почтовых серверов, чтобы они знали, куда почту для этого домена слать. Главное, чтобы этот второй сервер знал, куда пересылать полученную с клиента почту.
    Если второй сервер вдруг будет участвовать в доставке почты в этот ваш локальный домен с другого почтового сервера из другого домена - тогда создавайте запись MX.
    Маршрутизация писем между почтовыми серверами для одного домена обычно с MX не связана и делается другими средствами. Например, один сервер можно выбрать в качестве места хранения п/я, а на ддругих - указать, что все письма нада пересылать на него (общепринятое названиие такой настройки - SmartHost)
    Ответ написан
    Комментировать
  • Как написать запрос, который будет считывать меньше данных?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Здесь временная таблица не нужна: все можно сделать одним запросом:
    select distinct c.CrossArticleId from Crosses c inner join Crosses f 
    on c.ArticleId=f.CrossArticleId where f.ArticleId=1

    А чтобы избежать сканирования всей таблицы, создайте (если их ещё нет)индексы по полям Crosses.ArticleId и Crosses.CrossArticleId - например, как в предыдущем ответе написано. И пусть работает и оптимизирует запрос планировщик: он кремниевый, и у него есть статистика по индексам. Если вдруг сомневаетесь в планировщике - посмотрите план выполнения запроса.
    Индексы - это ключевой момент: без них серверу придется сканировать всю таблицу.
    Ответ написан
    3 комментария
  • Какой маршрут по умолчанию нужен для VPN?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Видите этот маршрут в route pring
    65.20.87.158  255.255.255.255      192.168.1.1      192.168.1.7     36
    - к хосту (маска 255.255.255.255 ) - серверу VPN (65.20.87.158 ) через шлюз локальной сети (192.168.1.1)?
    Именно он отвечает за сохранение в Windows пересылки трафика самого VPN на сервер VPN 65.20.87.158 , чтобы после смены маршрута по умолчанию через VPN пакеты на сервер VPN могли идти.
    В Windows это делает автоматически системный клиентский компонент службы удаленного доступа (как я понимаю, OpenVPN тоже им пользуется), причем адрес сервера VPN берется из реально установленного соединения с этим сервером.
    Такой же маршрут надо прописать и в Linux. Но как получить адрес сервера VPN для него - это я вам не скажу: для этого надо курить manы.
    Ответ написан
    Комментировать
  • Почему миграция данных происходит, а обновление базы нет из-за нарушения ограничения внешнего ключа?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    CityzenUNDEAD, сообщение об ошибке означает, что у вас таки действительно кривые данные, а именно - есть минимум одна запись в RiskLevels со значением поля OrganizationControlId = 0, для которой в таблице OrganizationControl нет записи с таким же значением первичного ключа (как я понял - поля Id).
    Вывести все такие записи из RiskLevels, которые ссылаются на отутствующие записи в OrganizationControl, можно SQL-запросом
    SELECT * FROM RiskLevels WHERE OrganizationControlId!=ALL(SELECT Id FROM OrganizationControl)

    И пока такие записи есть, наложить ограничение внешнего ключа не поле RiskLevels.OrganizationControlId у вас не получится. Ищите и разбирайтесь, что с этими записями делать.

    PS Entity Framework - он шибко умный, он сам находит связанные друг с другом поля, сам добавляет поля для чего-нибудь типа первичного ключа и т.д. Так что не удивляйтесь, что EF умничает, а если не хотите этого - жестко его контролируйте.
    Ответ написан
    Комментировать
  • Как загнать в dictionary key как null?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Условный оператор в возвращаемом выражении в лямбде в GroupBy формально имеет тип результата int?, и у ситаксического анализатора при выводе типа возвращаемого значения не хватило то ли мозгов догадаться, что результат не может быть null, то ли полномочий изменить тип возвращаемого выражения на int.
    Упростите ему задачу: используйте операцию объединения с null (?? - null-coalescing), тип ее результата гарантированно не-nullable:
    asd.Value?.GroupBy(x => x.ParentId??0 ).ToDictionary(gg => gg.Key, gg => gg.ToList());
    Ответ написан
    Комментировать
  • Как сделать автоответ в Exchange после увольнения сотрудников?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Создавайте п/я с тем же адресом, что был у отключаемого пользователя и настройте на нем автооответ (Set-MailboxAutoReplyConfiguration). Чтобы этот п/я не мешал в адресной книге - скройте его. Переадресацию, если нужно изменение темы, придется делать ЕМНИП транспортным правилом. Поэтому лучше тему не менять - достаточно будет того, что получателем будет отображаться уволенный сотрудник: в таком случае можно просто сделать переадресацию на самом п/я. Но я вообще бы предпочел подключить этот п/я (можно после увольнения: он сразу не удалится, а некоторое время будет обитать в числе отключенных) нужным людям как дополнительный в Outlook (перед этим нужно дать разрешение на него через Add-MailboxPermission ...-AccessRights FullAccess). Скрытый п/я подключается путем указания его legacyExchangeDN в качестве имени.
    Ответ написан
    Комментировать
  • Как правильно снять бекап с контроллера домена?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Вот вам ссылка на рекомендации изготовителя (Microsoft). Там - целый раздел, ссылка ведет на первую статью раздела. Если испытываете трудности с английским, то эти рекомедации переведены (как-то) и на русский язык.
    Резюме:
    1. встроенного средства архивирования Windows для резервного копирования и восстановления AD достаточно, но в плане удобства использования коммерческие решения лучше;
    2. одиночные контроллеры домена, не несущие других функций, восстанавливать нецелесообразно: никакой уникальной информации на них нет, и куда лучше просто добавить в AD новый КД с другим именем;
    3. берегитесь средств снятия и восстанвления образов диска, не поддерживающих AD специально, как средства резервного копирования и восстановления, такие средства безопасно использовать только в системе с ровно одним КД в лесу (по крайней мере - для физических КД, с виртуальными полегче - многие гипервизоры поддерживают идентификатор VM, а AD обучена правильно реагировать на его смену - но можно нарваться); однако при нужде использовать их можно - надо только отдельно копировать и восстанавливать до подключения в сеть Состояние системы.
    Ответ написан
    1 комментарий
  • Как исправить ошибку vector subscript out of range?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Как правильно замтили отвечашие ранее, такие вещи надо искать в отладчике, а при чтении кода можно, разве что, заметить подозрительные места. В частности, я вижу подозрительное место в функции buildFanoTable - вот этот оператор:
    if (abs(diff1 - diff2) < abs(diff1 - diff2 - frequencies[mid + 1].frequency)) {
            mid++;
            diff += frequencies[mid].frequency;
        }

    В предыдущем цикле mid может дойти до end-1, и обращение по индексу mid+1 будет как раз выходом за границу вектора.
    Ответ написан
    Комментировать
  • Как реализовать атомарное обновление 2 файлов?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Движок ESE от Microsoft (его используют системные БД MS Windows и MS Exchange) на для уменьшения объема просматриваемого журнала транзакций ("лога", он там хранится не в одном большом файле а в куче мелких) при рестарте создает и обновляет отдельный файл контрольной точки, в котором сохраняется ссылка на транзакцию, до которой все точно зафиксировано. А при рестарте - запускает применение журнала транзакций с контрольной точки.
    Попробуйте подумать в эту сторону - может, подойдет.
    PS А еще в Windows, в файловой системе NTFS есть встроенная поддержка транзакционного обновления. Но, во-первых - это только в Windows, а во-вторых, я не помню, чтобы в .NET была библиотека для использования этой возможности, так что, не исключено, что доступаться до нее придется через P/Invoke
    Ответ написан
    Комментировать
  • После передачи роли fsmo с контроллера домена AD роли на новом владельце не прижились. Что можно сделать?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Судя по симптомам, наиболее вероятная проблема - изначальная неисправность репликации SYSVOL, препятствующая этому КД объявить себя таковым. Перезапустите на каждом КД службу репликации DFS (она же DFSR) и смотрите наличие в его журнале событий ошибок или предупреждений в течение 15 минут после перезапуска. Дальнейшие действия зависят от того, что там зафиксировано.

    PS Официальные рекомендации от MS по аналогичным проблемам: https://learn.microsoft.com/en-us/troubleshoot/win...
    Ответ написан
    2 комментария
  • Почему после установки rds на сервере не подключиться по rdp?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    Если вам нужно подключиться самому для администрирования сервера - попробуйте для подключения запустить mstsc /admin: подключитесь в режиме администрирования, без запроса лицензии, но число таких подключений ограничено (ЕМНИП до сих пор 2-мя).
    Ответ написан
    Комментировать