Блокировка учетных записей active directory: руководство по инструментам и диагностике

Введение

Итак, как я уже сказал, очень важную роль здесь играет конфигурация SQL сервера, в частности, какая версия сервера установлена, x86 или x64.

Если говорить о последних версиях Microsoft SQL Server 2016-2019, то они только x64 и устанавливаются на 64-разрядные версии Windows.

Исходя из этого я разделю статью на несколько частей, в каждой из которых я расскажу про особенности импорта данных из Excel для самых распространённых случаев конфигураций и приведу конкретный порядок действий.

Для того чтобы быстро узнать, какая версия SQL Server установлена у Вас на компьютере, можете выполнить простой SQL запрос

   
   SELECT @@VERSION;

Обращение к файлу Excel и, соответственно, импорт данных в Microsoft SQL Server происходит с помощью специальных провайдеров (поставщиков). Для работы с Excel в Microsoft SQL Server обычно используются:

  • Jet.OLEDB.4.0
  • ACE.OLEDB.12.0

Во всех примерах ниже я буду посылать простой запрос SELECT на выборку данных из Excel файла, для того чтобы проверить доступ к данным в файле Excel. Чтобы осуществить импорт данных (загрузить данные в БД), Вы можете использовать любой удобный для Вас способ, например, конструкцию SELECT INTO или INSERT INTO.

Дополнительно рекомендовано закрывать файл Excel во время обращения к нему в распределенных запросах, а также указывать путь к файлу без пробелов (хотя современный SQL сервер умеет работать с пробелами).

Get-ADComputer — синтаксис использования командлета

Чтобы получать информацию из AD с помощью командлетов из модуля AD для PowerShell, вам не нужны права администратора домена. Достаточно, чтобы учётная запись, под которой запускается командлет, была членом группы «Domain Users / Authenticated Users».

Чтобы получить информацию о конкретной учётной записи компьютера в домене, укажите её имя в качестве аргумента параметра -Identity:

Get-ADComputer -Identity hackware-server

Пример вывода:

DistinguishedName : CN=HACKWARE-SERVER,OU=Domain Controllers,DC=ds,DC=hackware,DC=ru
DNSHostName       : HackWare-Server-2022.ds.hackware.ru
Enabled           : True
Name              : HACKWARE-SERVER
ObjectClass       : computer
ObjectGUID        : 77e65141-ebec-4728-a1cc-563199d86bf8
SamAccountName    : HACKWARE-SERVER$
SID               : S-1-5-21-670420343-3848213752-1643348011-1000

Get-ADComputer -Identity hackware-server -Properties *

Используя Get-Member, вы можете получить список всех свойств объекта ADComputer:

Get-ADComputer -Filter * -Properties * | Get-Member

Дата последнего входа компьютеров в сеть указана в атрибуте LastLogonDate.

Командлет Get-ADComputer позволяет отображать любые свойства компьютера в результатах выполнения команды. Удалите всю ненужную информацию, оставив только значения атрибутов Name и LastLogonDate.

Get-ADComputer -identity hackware-win -Properties * | Format-Table Name,LastLogonDate -Autosize

Итак, мы получили данные о последней регистрации в домене для отдельного компьютера. Затем вам нужно изменить команду, чтобы она отображала информацию о времени последней сетевой регистрации для всех компьютеров в домене. Для этого замените -Identity на -Filter *:

Get-ADComputer -Filter * -Properties * | Format-Table Name,LastLogonDate -Autosize

У нас получилась простая таблица, которая содержит всего 2 поля: имя компьютера и дата LastLogonData. Вы можете добавить в эту таблицу другие поля объекта ADComputer.

Чтобы отобразить информацию об объектах компьютеров в определённом OU (организационном подразделении), используйте параметр -SearchBase:

Get-ADComputer -SearchBase 'OU=Paris,DC=woshub,DC=loc' -Filter * -Properties * | Format-Table Name,LastLogonDate -Autosize

Отсортируйте результаты запроса по дате последнего входа в систему с помощью командлета Sort-Object:

Get-ADComputer -Filter * -Properties * | Sort-Object LastLogonDate | Format-Table Name,LastLogonDate -Autosize

Итак, у нас есть список компьютеров и дата их последнего входа в домен Active Directory. Теперь мы хотим отключить учётные записи компьютеров, которые не использовались в течение 120 или более дней.

Используя Get-Date, мы можем получить значение текущей даты в переменной и уменьшить его до 120 дней:

$date_with_offset = (Get-Date).AddDays(-120)

Полученную переменную даты можно использовать как фильтр запроса Get-ADComputer в поле LastLogonDate:

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset } | Sort-Object LastLogonDate | Format-Table Name,LastLogonDate -Autosize

Итак, мы создали список неактивных учётных записей компьютеров, которые не регистрировались в сети более 120 дней. Используйте команду Disable-ADAccount или Set-ADComputer, чтобы отключить их.

Совет. В первый раз лучше проверить результаты выполнения команды с помощью переключателя -WhatIf, который позволяет увидеть, что произойдёт, если бы команда была запущена, но при этом в системе ничего изменено не будет.

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset } | Set-ADComputer -Enabled $false -WhatIf

Теперь вы можете отключить все неактивные учётные записи компьютеров:

Get-ADComputer -Properties LastLogonDate -Filter {LastLogonData -lt $date_with_offset } | Set-ADComputer -Enabled $false

Примечание. Также вы можете получить список заблокированных, отключённых и неактивных компьютеров и пользователей домена с помощью отдельного командлета Search-ADAccount.

Кастомизация отчета

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

Фиксированные даты начала и окончания

При вызове функции вы можете указать точную дату начала периода отчета и точную дату его окончания. Строка вызова функции будет выглядеть так (можно редактировать как формулу Excel):

Первый параметр в строке вызова функции – дата начала периода, второй – дата окончания. Между собой они отделяются запятой и записываются в специальном формате: #date(,,). Например, #date(1980,3,6) означает 6-е марта 1980 года.

Частичная автоматизация периода

Если вы хотите получить данные, например, с 3 апреля 2021-го по сегодняшнее число, то строка вызова функции будет выглядеть так:

Значение первого параметра – #date(2021,4,3), а второго – null. Значение null соответствует значению по умолчанию (сегодняшнее число) или отсутствующему значению.

Полная автоматизация периода

Если у даты начала вы укажете значение null, то туда автоматически подставится число, которое было 30 дней назад. Что делать, если эта дата должна меняться динамически, но нужен, к примеру, 15-дневный период?

  1. Узнайте текущее число.
  2. Сместитесь на нужное количество дней в прошлое.
  3. Создайте новый пустой запрос.

  1. Кликните правой кнопкой мыши в любом пустом месте на панели «Запросы».
  2. В появившемся меню пройдите по пунктам: «Новый запрос» –> «Другие источники» –> «Пустой запрос».

В название каждой функции ниже я вставил ссылку на официальную документацию на сайте Microsoft – переходите и получайте дополнительную информацию.

Введите формулу DateTime.LocalNow() в поле формул и нажмите Enter на клавиатуре.

Формула покажет текущие дату и время. Для вызова функции нам нужна только дата. Извлечь дату из даты и времени можно так:

  1. На вкладке «Преобразование» нажмите кнопку «Дата».
  2. Выберите пункт «Только дата».

Power Query запустит функцию Date.From, которая принимает только один параметр – значение даты или даты и времени.

Чтобы узнать дату, отличающуюся от другой даты на нужное количество дней, можно воспользоваться функцией Date.AddDays. Первым ее параметром нужно указать дату, а вторым – количество дней, на которые нужно сместиться относительно нее. Если смещение меньше нуля, результат окажется в прошлом, больше нуля – в будущем.

Модифицируйте формулу следующим образом:

Укажите название функции Date.AddDays, в круглых скобках перечислите параметры ее вызова:

  • Date.From(Источник) – функция, полученная на предыдущем шаге (извлекает дату из значения даты и времени);
  • -15 – количество дней, на которое нужно сместиться относительно указанной даты.

Если сместиться нужно не на дни, используйте аналогичные функции Date.AddWeeks (смещение на целое число недель), Date.AddMonths (месяцев), Date.AddQuarters (кварталов) и Date.AddYears (лет). 

Существуют и функции смещения на начало или конец недели, месяца, квартала и года. Ищите их и примеры их использования в официальной документации.

Переименуйте запрос, чтобы понимать, какие данные в нем находятся:

Переименуйте запрос, чтобы понимать, какие данные в нем находятся:

Вернитесь к предыдущему запросу, который на скриншоте называется «Вызванная функция». Вторым параметром в вызове функции укажите ссылку на запрос «15 дней назад»: заключите название запроса в двойные кавычки и поставьте в начале #. 

Должно получиться так:

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

Теперь нажмите «Закрыть и загрузить», чтобы вернуться в Excel и обновлять отчет нажатием одной кнопки.

Настройка Excel для получения данных с SQL сервера

Настройка, делается достаточно просто, но требует определенных навыков и консультации администратора SQL сервера. Вы, конечно, можете попросить программиста настроить Excel на работу или сделать это сами, просто спросив пару пунктов, а каких мы сейчас узнаем.

И первое что нам нужно сделать, это конечно открыть Excel 2010. Затем перейти на вкладку «Данные» и нажать на кнопку «Из других источников» и выбрать «С сервера SQL Server»

Затем у Вас откроется окно «Мастер подключения данных» в котором Вам необходимо, указать на каком сервере располагается база данных и вариант проверки подлинности. Вот именно это Вам придется узнать у администратора баз данных, а если Вы и есть администратор, то заполняйте поля и жмите «Далее».

Где,

  • Имя сервера – это адрес Вашего сервера, здесь можно указывать как ip адрес так и DNS имя, в моем случае сервер расположен на этом же компьютере поэтому я и указал localhost;
  • Учетные данные – т.е. это логин и пароль подключения к серверу, здесь возможно два варианта, первый это когда в сети Вашей организации развернута Active directory (Служба каталогов или домен), то в этом случае можно указать, что использовать те данные, под которыми Вы загрузили компьютер, т.е. доступы доменной учетки, и в этом случае никаких паролей здесь вводить не надо, единственное замечание что и на MSSql сервере должна стоять такая настройка по проверки подлинности. У меня именно так и настроено, поэтому я и выбрал этот пункт. А второй вариант, это когда администратор сам заводит учетные данные на SQL сервере и выдает их Вам, и в этом случае он должен их Вам предоставить.

Далее необходимо выбрать базу, к которой подключаться, в нашем примере это база test. Также это подключение можно настроить сразу на работу с определенной таблицей или представлением, список таблиц и представлений у Вас будет отображен, давайте мы сделаем именно так и настроем подключение сразу на нашу таблицу test_table. Если Вы не хотите этого, а хотите чтобы Вы подключались к базе и потом выбирали нужную таблицу, то не ставьте галочку напротив пункта «Подключаться к определенной таблице», а как я уже сказал, мы поставим эту галочку и жмем «Далее».

В следующем окне нам предложат задать имя файла подключения, название и описание, я например, написал вот так:

После того как Вы нажмете «Готово» у Вас откроется окно импорта этих данных, где можно указать в какие ячейки копировать данные, я например, по стандарту выгружу данные, начиная с первой ячейки, и жмем «ОК»:

В итоге у меня загрузятся из базы вот такие данные:

Т.е. в точности как в базе. Теперь когда, например, изменились данные в этой таблице, и Вы хотите выгрузить их повторно Вам не нужно повторять все заново, достаточно в excel перейти на вкладку «Данные» нажать кнопку «Существующие подключения» и выбрать соответствующее, т.е. то которое Вы только что создали.

Вот собственно и все, как мне кажется все достаточно просто.

Таким способом получать данные в Excel из базы SQL сервера очень удобно и главное быстро, надеюсь, Вам пригодятся эти знания полученные в сегодняшнем уроке. Удачи!

Нравится5Не нравится4

Примеры использования Get-ADUser

Давайте покажем ещё несколько полезных примеров команд для запросов пользователей Active Directory с помощью различных фильтров. Вы можете объединить их, чтобы получить необходимый список пользовательских объектов AD:

Отобразить пользователей AD, имя которых начинается с Joe:

Get-ADUser -Filter {name -like "Joe*"}

Вы можете использовать PowerShell для расчёта общего количества учётных записей пользователей в Active Directory:

Get-ADUser -Filter {SamAccountName -like "*"} | Measure-Object

Вывод списка пользователей и их свойств, размещённых в определённом организационном подразделении (контейнере) в данном случае это OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM:

Get-ADUser -Filter * -SearchBase "OU=Finance,OU=UserAccounts,DC=FABRIKAM,DC=COM"

Найти отключённые учётные записи пользователей Active Directory:

Get-ADUser -Filter {Enabled -eq "False"} | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

Вы можете проверить дату создания учётной записи пользователя Active Directory с помощью команды:

Get-ADUser -Filter * -Properties Name,WhenCreated | Select name,whenCreated

Вы можете получить список недавно добавленных пользователей Active Directory, созданных за последние 24 часа:

$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter {(whencreated -ge $lastday)}

Вывести список учётных записей с просроченным паролем (вы можете настроить параметры истечения срока действия пароля в политике паролей домена):

Get-ADUser -Filter {Enabled -eq $True} -Properties name,passwordExpired | Where-Object {$_.PasswordExpired}| Select-Object name,passwordexpired

Командлеты Get-ADUser и Add-ADGroupMember можно использовать для создания динамических групп пользователей AD (в зависимости от города, должности, отдела и прочего).

Задача: для списка учётных записей, которые хранятся в текстовом файле (по одной учётной записи в строке), вам необходимо получить название компании пользователя из AD и сохранить его в файл CSV (вы можете легко импортировать этот файл в Excel).

Import-Csv c:\ps\users_list.csv | ForEach {
	Get-ADUser -Identity $_.user -Properties Name,Company |
	Select-Object Name,Company |
	Export-CSV c:\ps\users_ad_list.csv -Append -Encoding UTF8
}

Пользователи, которые не меняли свои пароли в течение последних 90 дней:

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -Filter {(passwordlastset -le $90_days)}

Чтобы получить фотографию пользователя из Active Directory и сохранить её в файле jpg, выполните следующие команды:

$usr = Get-ADUser sjoe -Properties thumbnailPhoto
$usr.thumbnailPhoto | Set-Content sjoe.jpg -Encoding byte

Чтобы получить список групп AD, членом которых является учётная запись пользователя:

Get-AdUser MiAl -Properties memberof | Select-Object memberof -ExpandProperty memberof

Перечислить пользователей из OU, которые являются членами определённой группы безопасности домена:

Get-ADUser -SearchBase 'OU=Rome,OU=Italy,DC=hackware,DC=ru' -Filter * -Properties memberof | Where-Object {($_.memberof -like "*CEO*")}

Перечислить компьютеры домена, на которых пользователю разрешён вход.

Get-ADUser MiAl -Properties LogonWorkstations | Format-List Name,LogonWorkstations

Чтобы искать компьютеры и фильтровать компьютеры по их свойствам в Active Directory, вы можете использовать другой командлет – Get-ADComputer.

Решаем проблему «Доменные службы Active Directory сейчас недоступны»

Существует несколько причин, которые вызывают данную ошибку. Чаще всего они связаны с тем, службы не могут быть включены или им не предоставляется доступ из-за определенных обстоятельств. Решается неполадка разными вариантами, каждый из которых имеет собственный алгоритм действий и отличается по сложности. Давайте начнем с самого простого.

Способ 2: Использование принтера по умолчанию

Как уже было сказано выше, подобная ошибка появляется у тех юзеров, которые подключены к домашней или рабочей сети. Из-за того, что одновременно может задействоваться сразу несколько устройств, возникает проблема с доступом к Active Directory. Вам следует назначить оборудование по умолчанию и снова повторить процедуру печати. Для этого нужно лишь перейти в «Устройства и принтеры» через «Панель управления», нажать правой кнопкой мыши на устройстве и выбрать пункт «Использовать по умолчанию».

Подробнее:

Способ 4: Диагностика неполадок

Как видите, первые два метода требовали от вас выполнения всего нескольких манипуляций и не занимали много времени. Начиная с пятого метода, процедура немного усложняется, поэтому перед переходом к дальнейшим инструкциям мы советуем проверить принтер на наличие ошибок с помощью встроенного средства Windows. Они будут автоматически исправлены. Вам нужно сделать следующее:

  1. Откройте меню «Пуск» и перейдите в «Панель управления».

Выберите категорию «Центр управления сетями и общим доступом».

Внизу нажмите на инструмент «Устранение неполадок».

В разделе «Печать» укажите категорию «Принтер».

Кликните на «Дополнительно».

Запустите средство от имени администратора.

Переходите к запуску сканирования нажатием на «Далее».

Дождитесь завершения анализа оборудования.

Из предоставленного списка выберите принтер, который не работает.

Осталось только подождать, пока средство выполнит поиск ошибок и устранит их, если они будут найдены. После этого следуйте инструкциям, отобразившимся в окне диагностики.

Способ 5: Проверка конфигурации WINS

Служба сопоставления WINS отвечает за определение IP-адресов, и ее неправильная работа может вызывать рассматриваемую ошибку при попытке печати через сетевое оборудование. Решить эту проблему можно следующим образом:

  1. Выполните первые два пункта предыдущей инструкции.
  2. Перейдите в раздел «Изменение параметров адаптера».

Кликните ПКМ на активном подключении и выберите «Свойства».

Отыщите строку «Протокол Интернета версии 4», выделите ее и переместитесь в «Свойства».

Во вкладке «Общие» нажмите на «Дополнительно».

Проверьте параметры WINS. Маркер должен стоять возле пункта «По умолчанию», однако в некоторых рабочих сетях конфигурацию устанавливает системный администратор, поэтому нужно обратиться к нему за помощью.

Способ 6: Переустановка драйверов и добавление принтера

Подробнее: Удаление старого драйвера принтера

Подробнее: Установка драйверов для принтера

Выше мы развернуто рассказали о шести методах исправления недоступности доменных директорий AD при попытке отправить документ в печать. Как видите, все они отличаются по сложности и подходят в разных ситуациях. Мы рекомендуем начать с самого простого, постепенно переходя к сложным, пока не найдется правильное решение.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

Средство BCP

BCP — это программа, которая запускается из командной строки. В приведенном ниже примере данные загружаются из файла с разделителями-запятыми в существующую таблицу базы данных .

Как было описано выше в разделе , необходимо экспортировать данные Excel в виде текста, прежде чем вы сможете использовать BCP для их импорта. BCP не может считывать файлы Excel напрямую. Используется для импорта в SQL Server или базу данных SQL из текстового файла (CSV), сохраненного в локальном хранилище.

Важно!

Для текстового файла (CSV), хранящегося в хранилище BLOB-объектов Azure, используйте BULK INSERT или OPENROWSET. Примеры см. в разделе Пример.

Дополнительные сведения о программе BCP см. в указанных ниже разделах.

  • Массовый импорт и экспорт данных с помощью программы bcp
  • Программа bcp
  • Подготовка данных к массовому экспорту или импорту

Импорт синонимов

Синонимы импортируются следующим образом:

  • Во-первых, импортируются все значения, затем устанавливается соединение с синонимами.

  • Если соединение со значениями синонимов установить невозможно, на экране журнала отображается сообщение об ошибке. Возможна ситуация, когда ведущие значения и синонимы из файла импортируются в домен, но не задаются в качестве синонимов.

Следующие сведения справедливы для процесса установления соединения с синонимами:

  • Если ведущее значение в файле Excel уже существует в домене в качестве синонима другого значения, необходимо задать синонимы вручную (например, в файле Excel значение А должно быть ведущим значением для значения В, но значение домена А отображается в качестве синонима значения С). Кроме того, для задания синонимов вручную после завершения импорта вы можете отменить связь со значениями, которые в настоящее время являются синонимами (например, отменить связь с упомянутыми выше значениями A и C), а затем импортировать файл.

  • Если синоним уже соединен с другим ведущим значением, необходимо задать синонимы вручную.

  • Если по какой-либо причине невозможно подсоединить вручную значения в приложении, эти значения в операции импорта не используются.

Get-ADUser: экспорт пользователей домена в текстовый или CSV/Excel файл

Полученный список пользователей домена с атрибутами можно выгрузить в текстовый файл:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires > C: empusers.txt

Или вы можете выгрузить пользователей AD в файл CSV, который в дальнейшем будет удобно экспортировать в Excel.

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | select Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c: empuser-password-expires-2019.csv -Append -Encoding UTF8

Об Active Directory

Мы не будем рассматривать  общуюю концепцию Active Directory, откуда появилась и прочее. Скажем лишь одно, что эта она из реализаций протокола LDAP, взятой компанией Microsoft  на вооружение при создании операционной системой.

А раз так то, то все что применимо для протокола LDAP применимо и для работы с AD.

Если мы возьмем бесплатную программу для просмотра и редактирования LDAP аттрибутов (Apache Directory Studio) и подключимся к контроллеру домена, то нам откроется огромный мир аттрибутов и их значений, которые обычно скрыты стандартными программами, и недоступны для пользователей и администраторов.

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

memberOf

objectClass

Исходные данные и требования

В качестве примера давайте представим, что нам нужно обратиться к файлу «TestExcel.xls», который расположен на диске D. Сами данные расположены на листе со стандартным названием «Лист1», они имеют следующую структуру.

ProductId CategoryId ProductName Price
1 1 Клавиатура 100
2 1 Мышь 50
3 2 Телефон 300

Все примеры будут выполнены в Microsoft SQL Server 2016 Express.

Для того чтобы начать пользоваться распределенными запросами, нам сначала нужно включить данную возможность на SQL сервере, так как по умолчанию она выключена.

Включается возможность использования распределённых запросов с помощью системной хранимой процедуры sp_configure, которая отвечает за системные параметры сервера. Нам необходимо параметру Ad Hoc Distributed Queries присвоить значение 1, для этого выполните следующую SQL инструкцию.

   
   sp_configure 'show advanced options', 1;
   RECONFIGURE;
   GO
   sp_configure 'Ad Hoc Distributed Queries', 1;
   RECONFIGURE;
   GO

Параметром show advanced options мы отображаем дополнительные параметры системной хранимой процедуры sp_configure, а командой RECONFIGURE мы применяем новые параметры.

Как доработать производительный RLS

Неоднократно в последнее время поступали задачи, когда требовалось доработать новый производительный RLS. В своей статье Ретунский Александр, программист компании АО «Корпоративные ИТ-проекты» (официальный партнер ИнфоСофт) опишет последовательность действий при доработке нового RLS, ключевые моменты и сложности, с которыми столкнулся. В Интернете статей или инструкций, которые подробно и просто описывают – как доработать производительный RLS, не так много и автор делиться своим опытом.
В данной статье не будут описаны различия и плюсы/минусы между стандартным и производительным RLS, в Интернете по этому вопросу есть много информации.

Листинг серверной части на языке PHP

Это как раз ваш скрипт, который должне размещаться на вашем сервере :)

function people($info,$trig) {

global $json_info;

$arr=preg_split(‘/\;/’, $info);

$info=trim(ereg_replace(» +»,» «,$arr));

$key=trim(ereg_replace(» +»,»»,$arr));

$ldaprdn  = ‘имя администратора каталога’;     // ldap rdn или dn

$ldappass = ‘Пароль администратора каталога ‘;  // ассоциированный пароль

$ldapconn = ldap_connect(«IP адрес сервера»)

    or die(«Не могу соединиться с сервером LDAP.»);

if ($ldapconn) {

    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    if ($ldapbind) {

//        echo «LDAP-привязка успешна…»;

    } else {

//        echo «LDAP-привязка не удалась…»;

    }

}

ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

$dn = «DN сервера или в нашем конректном примере, уровень иерархии каталога LDAP откуда начнем искать совпадения по фильтру»;

$filter='(&(displayName=’.@iconv(«UTF-8», «WINDOWS-1251»,$info).’*)(objectClass=person))’;

// так как имя вводим в UTF кодировке а в Active Directory хранятся в кодировке Windows, то осуществлем переконвертацию

$sr=ldap_search($ldapconn, $dn, $filter);

$infa = ldap_get_entries($ldapconn, $sr);

//print_r($infa);

foreach ($infa as $value) {

$result=iconv(«WINDOWS-1251″,»UTF-8»,$value);

}

$msg=»\r\nИмя пользователя: \r\n».$result;

$str_out=array(‘info’=>$info,’msg’=>$msg,’result’=>$result);

stream_out($str_out,$trig);

}

Функция взята с рабочего процеса, и поэтому «не причесана». Сама суть для большинства понятна и не требует подробных разъяснений.

Копирование числовых ячеек из 1С в Excel Промо

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

Средство BCP

BCP — это программа, которая запускается из командной строки. В приведенном ниже примере данные загружаются из файла с разделителями-запятыми в существующую таблицу базы данных .

Как было описано выше в разделе , необходимо экспортировать данные Excel в виде текста, прежде чем вы сможете использовать BCP для их импорта. BCP не может считывать файлы Excel напрямую. Используется для импорта в SQL Server или базу данных SQL из текстового файла (CSV), сохраненного в локальном хранилище.

Важно!

Для текстового файла (CSV), хранящегося в хранилище BLOB-объектов Azure, используйте BULK INSERT или OPENROWSET. Примеры см. в разделе Пример.

Дополнительные сведения о программе BCP см. в указанных ниже разделах.

  • Массовый импорт и экспорт данных с помощью программы bcp
  • Программа bcp
  • Подготовка данных к массовому экспорту или импорту

Список методов

Для импорта данных из Excel можно использовать следующие средства:

Сначала экспортировать в текст (SQL Server и база данных SQL) Непосредственно из Excel (только в локальной среде SQL Server)
Инструкция
Функция
.
   

Если вы хотите импортировать несколько листов из книги Excel, обычно нужно запускать каждое из этих средств отдельно для каждого листа.

Этот список не дает полного описания таких сложных инструментов и служб, как SSIS или фабрика данных Azure. Дополнительные сведения об интересующем вас решении доступны по ссылкам ниже.

Важно!

Дополнительные сведения о подключении к файлам Excel, а также об ограничениях и известных проблемах, связанных с загрузкой данных в файлы этого приложения и из них, см. в разделе Загрузка данных в приложение Excel или из него с помощью служб SQL Server Integration Services (SSIS).

Если у вас не установлен SQL Server или SQL Server есть, но нет SQL Server Management Studio, см. статью Скачивание SQL Server Management Studio (SSMS).

Часто встречающиеся ошибки 1С и общие способы их решения Промо

Статья рассчитана в первую очередь на тех, кто недостаточно много работал с 1С и не успел набить шишек при встрече с часто встречающимися ошибками. Обычно можно определить для себя несколько действий благодаря которым можно определить решится ли проблема за несколько минут или же потребует дополнительного анализа. В первое время сталкиваясь с простыми ошибками тратил уйму времени на то, чтобы с ними разобраться. Конечно, интернет сильно помогает в таких вопросах, но не всегда есть возможность им воспользоваться. Поэтому надеюсь, что эта статья поможет кому-нибудь сэкономить время.

IMPORTHTML для создания парсера веи-ресурсов в Эксель

Синтаксис IMPORTXML в Google Таблице

Для того, чтобы использовать данную функцию потребуется в таблице написать формулу:

=IMPORTXML(Ссылка;Запрос;Индекс)

Где:

  • Ссылка — URL-адрес страницы;
  • Запрос – может быть в формате «table» или «list», выгружающий таблицу и список, соответственно.
  • Индекс – порядковый номер элемента.

С примерами можно ознакомиться в файле:

https://docs.google.com/spreadsheets/d/1GpcGZd7CW4ugGECFHVMqzTXrbxHhdmP-VvIYtavSp4s/edit#gid=0

Парсинг таблиц

В примерах будет использоваться данная статья, перейдя на которую можно открыть консоль разработчика (в Google Chrome это можно сделать кликнув правой клавишей мыши и выбрав пункт «Посмотреть код» или же нажав на сочетание клавиш «CTRL+Shift+I»).

Теперь просматриваем код таблицы, которая заключена в теге <table>.

Данный элемент можно будет выгрузить при помощи конструкции:

=IMPORTHTML(A2;»table»;1)

  • Где A2 ячейка со ссылкой;
  • table позволяет получить данные с таблицы;
  • 1 – номер таблицы.

Важно! Сам запрос table или list записывается в кавычках «запрос»

Парсинг списков

Получить список, заключенный в тегах <ul>…</ul> при помощи конструкции.

=IMPORTHTML(A2;»list»;1)

В данном случае речь идет о меню, которое также представлено в виде списка.

Если использовать индекс третей таблицы, то будут получены данные с третей таблицы в меню:

Формула:

=IMPORTHTML(A2;»list»;2)

Все готово, данные получены.

Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана

Если кратко описать мое отношение к Postgres: Использовал до того, как это стало мейнстримом.
Конкретнее: Собирал на нем сервера для компаний среднего размера (до 50 активных пользователей 1С).
На настоящий момент их набирается уже больше, чем пальцев рук пары человек (нормальных, а не фрезеровщиков).
Следуя этой статье вы сможете себе собрать такой же и начать спокойную легальную жизнь, максимально легко сделать первый шаг в мир Linux и Postgres.
А я побороться за 1. Лучший бизнес-кейс (лучший опыт автоматизации предприятия на базе PostgreSQL).
Если, конечно, статья придется вам по вкусу.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: