Powershell выгрузка в excel

Обновлено: 05.07.2024

I'm trying to export a complete CSV to Excel by using Powershell. I stuck at a point where static column names are used. But this doesn't work if my CSV has generic unknown header names.

Steps to reproduce

Open your PowerShell ISE and copy & paste the following standalone code. Run it with F5
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell_ise.exe"

What it does

  1. The script will export a list of all active processes as a CSV to your temp folder. This file is only for our example. It could be any CSV with any data
  2. It reads in the newly created CSV and saves it under the $processes variable
  3. It creates a new and empty Excel workbook where we can write data
  4. It iterates through all rows (?) and writes all values from the name and vm column to Excel

My questions

  • What if I don't know the column headers? (In our example name and vm ). How do I address values where I don't know their header names?
  • How do I count how many columns a CSV has? (after reading it with Import-Csv )

I just want to write an entire CSV to Excel with Powershell

2,314 10 10 gold badges 45 45 silver badges 78 78 bronze badges

8 Answers 8

Ups, I entirely forgot this question. In the meantime I got a solution.
This Powershell script converts a CSV to XLSX in the background

Gimmicks are

PowerShell Code

2,314 10 10 gold badges 45 45 silver badges 78 78 bronze badges @Ziil Can you describe your issue a bit more? I just tested the script with a input csv that contains Umlauts and it worked fine @Ziil Here are my test files. Input, Output and the script. And here you see that my excel does not have the described issue. What Windows language, Excel version and language are you using? I doubt that this is a general problem. My guess is that it is related to some setting we need to identify

I am using excelcnv.exe to convert csv into xlsx and that seemed to work properly. You will have to change the directory to where your excelcnv is. If 32 bit, it goes to Program Files (x86)

Why would you bother? Load your CSV into Excel like this:

You just need to make sure that the CSV export uses the delimiter defined in your regional settings. Override with -Delimiter if need be.

Edit: A more general solution that should preserve the values from the CSV as plain text. Code for iterating over the CSV columns taken from here.

Obviously this second approach won't perform too well, because it's processing each cell individually.


180k 23 23 gold badges 219 219 silver badges 288 288 bronze badges As I mentioned in my question "This file is only for our example". Lets assume we have a CSV with leading zeros and equal signs and we want to avoid Excels auto format detection. All values should be treated as plain text. Worked just fine when I tested it, but I have to admit that the MS Office version on my Windows test box is quite antique. Try Item($i, $j) and put $j++ after the conditional. Also try $ws.Cells.Item($i, $j).Value2 instead of $ws.Cells.Item($i, $j).Value .

This topic really helped me, so I'd like to share my improvements. All credits go to the nixda, this is based on his answer.

For those who need to convert multiple csv's in a folder, just modify the directory. Outputfilenames will be identical to input, just with another extension.

Take care of the cleanup in the end, if you like to keep the original csv's you might not want to remove these.

date

31.08.2020

directory

Active Directory, Office, PowerShell

comments

комментариев 6

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

Обращение к Excel из PowerShell выполняется через отдельный Component Object Model (COM) объект. Это требует наличие установленного Excel на компьютере.

Прежде, чем показать, как обратиться к данным в ячейке файла Excel, необходимо рассмотреть архитектуру уровней представления в документе Excel. На следующем рисунке показаны 4 вложенных уровня в объектной модели Excel:

  • Уровень приложения (Application Layer) – запущенное приложение Excel;
  • Уровень книги (WorkBook Layer) – одновременно могут быть открыты несколько книг (документов Excel);
  • Уровень листа (WorkSheet Layer) – в каждом xlsx файле может быть несколько листов;
  • Ячейки (Range Layer) – здесь можно получить доступ к данным в конкретной ячейке или диапазонe ячеек.

com модель документа excel

Доступ к данным в Excel из консоли PowerShell

Рассмотрим на простом примере как получить доступ из PowerShell к данным в Excel файле со списком сотрудников.

excel файл с данными, как прочитать из powershell скрипта

Сначала нужно запустить на компьютере приложение Excel (application layer) через COM объект:

После выполнения этой команды на компьютере запускается в фоновом режиме приложение Excel. Чтобы сделать окно Excel видимым, нужно изменить свойство Visible COM объекта:

Все свойства объекта Excel можно вывести так: $ExcelObj| fl

Теперь можно открыть файл (книгу, workbook) Excel:

отрыть excel файл с помощью powershell

В каждом файле Excel может быть несколько листов (worksheets). Выведем список листов в текущей книге Excel:

$ExcelWorkBook.Sheets| fl Name, index

Теперь можно открыть конкретный лист (по имени или по индексу):

Текущий (активный) лист Excel можно узнать командой:

$ExcelWorkBook.ActiveSheet | fl Name, Index

выбрать активную книгу excel с помощью powershell

Теперь вы можете получить значения из ячеек документа Excel. Можно использовать различные способы адресации ячеек в книге Excel: через диапазон (Range), ячейку (Cell), столбец (Columns) или строку(Rows). Ниже я привел разные примеры получения данных из одной и той же ячейки:

$ExcelWorkSheet.Range("B2").Text
$ExcelWorkSheet.Range("B2:B2").Text
$ExcelWorkSheet.Range("B2","B2").Text
$ExcelWorkSheet.cells.Item(2, 2).text
$ExcelWorkSheet.cells.Item(2, 2).value2
$ExcelWorkSheet.Columns.Item(2).Rows.Item(2).Text
$ExcelWorkSheet.Rows.Item(2).Columns.Item(2).Text

powershell - получить значение ячейки excel

Как получить данные из Active Directory и сохранить их в книге Excel?

Рассмотрим практический пример использования доступа к данным Excel из PowerShell. Например, нам нужно для каждого пользователя в Excel файле получить информацию из Active Directory. Например, его телефон (атрибут telephoneNumber), отдел (department) и email адрес (mail).

Для получения информации об атрибутах пользователя в AD мы будем использовать командлет Get-ADUser из модуля AD PowerShell.

В результате в Excel файле для каждого пользователя были добавлены столбцы с информацией из AD.

powershell скрипт для получения данных пользователей из Active Directory и сохранения в Excel

На сайте есть статья, в которой показывается как получить данные из AD из vba макроса Excel. На мой взгляд метод с обращением к AD из Excel намного проще и гибче.

Рассмотрим еще один пример построения отчета с помощью PowerShell и Excel. Допустим, вам нужно построить Excel отчет о состоянии службы Print Spooler на всех серверах домена.

Для получения списка серверов в AD используется командлет Get-ADComputer, а для удаленной проверки статуса службы на серверах командлет WinRM Invoke-Command.

Область применения возможностей доступа из PowerShell в Excel очень широка. Начиная от простого построения отчетов, например, из Active Directory, и заканчивая возможностью создания PowerShell скриптов для актуализации данных в AD из Excel.

И снова добрый день с:
Есть некий скрипт, проверяющий железки на всех компьютерах в лесу AD и выводящий результат для каждой отдельной машинки в .txt файл. Но появилась необходимость вывести результат в виде таблицы Excel. Как грамотнее и правильнее будет переделать скрипт?

Вот собственно и он:

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Вывод результата выполнения скрипта в .csv
Доброго дня, нужна помощь с: Cкрипт опрашивает около 200 компьютеров в лесу AD. Не все из них.

Вывод результата выполнения скрипта в модальном окне
суть в следующем: на сайте в шапке задуман адрес и ссылка на схему проезда. в яндексовском.

Вывод результата выполнения программы в ячейки таблицы в excel
Здравствуйте, подскажите пожалуйста, как, собственно, отобразить результат в таблице? Задание: .

Обработка результата выполнения SQL скрипта
есть скрипт UPDATE tblProduct SET Name = 'Работ' WHERE ProductID = 34 AND TimeStampF =.

Решение

появилась необходимость вывести результат в виде таблицы Excel. Как грамотнее и правильнее будет переделать скрипт?

Добавлено через 31 минуту

Как грамотнее и правильнее будет переделать скрипт? Общий принцип такой - c помощью нужных вам WMI классов выбираете необходимые свойства и объединяете/сохраняете их в новом объекте (New-Object), далее все эти объекты объединяются в один массив, который в свою очередь экспортируете в csv-файл. Примерно, как тут.

Всё работает за исключением одного момента, скрипт перезаписывает последний проверенный компьютер и в итоге в csv файле у меня всегда только 1 комп, где я накосячил?
Как заставить скрипт дополнять файл, а не перезаписывать его? У меня тут около 200 компов )

Решение

Отлично, всё зашуршало, но есть проблема, если у компьютера более 1-го монитора или более 1-го HDD, то скрипт не даёт вообще никакой информации по этим параметрам, если же этих элементов по 1 штуке, то всё проходит гладко.

Решение

но есть проблема, если у компьютера более 1-го монитора или более 1-го HDD

Если вместо одного объекта может вернуться массив из таких объектов (несколько: физических и/или логических дисков, мониторов, модулей памяти, физических процессоров, сетевых карт и т.д.), тогда сначала необходимо выбрать формат таблицы/отчёта для этих данных + добавлять соответствующую обработку всюду, где только может появиться массив.

Собственно всё заработало как нужно, осталась лишь небольшая загвоздка, скрипт опрашивает около 200 компьютеров в лесу AD. Не все из них могут быть доступны, а опросить в конечном итоге нужно ВСЕ. Как можно уговорить скрипт при экспортировании в .csv файл не заменять строки с существующими компьютерами, но вносить те до которых ранее он не мог достучаться, но теперь они доступны?

Вывод результата консольного скрипта
Можно ли настроить nginx так, что бы он выводил результат некоторой команды? Результат сыпется в.

Вывод результата работы скрипта в таблице
Доброго времени суток! Как сделать чтобы результаты работы скрипта отзывов выводился в таблице -.

Вывод результата выполнения процедуры
Здравствуйте. Извините за глупый вопрос, никак не могу понять как мне выдать на экран результат.

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

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

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

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

Рассмотрим, например, задачу мониторинга. Оболочка Windows PowerShell позволяет легко получить моментальный снимок процессов, запущенных на вашем компьютере. С помощью командлета Get-Process получается удобный отсортированный набор выходных данных, как показано на рис. 1.

Рис. 1 Список процессов, запущенных на компьютере, полученный с помощью командлета Get-Process

С помощью командлета Get-Process во многих случаях можно получить полезные результаты: количество открытых дескрипторов, пару разных представлений расхода памяти и картину использования центрального процессора. Когда же выйдет версия оболочки Windows PowerShell 2.0, командлету Get-Process можно будет передавать параметр –computername, что позволит получать такую же информацию с удаленного компьютера. Кому со всей этой информацией может понадобиться исследовать что-то еще?

Проблема заключается в том, что эти длинные столбцы данных часто маскируют все действительно важные детали. И хотя в будущей версии Windows PowerShell 2.0 будет поддерживать параметр –computername, в настоящее время сетевому администратору не предоставлено никаких дополнительных возможностей. В результате для того, чтобы наблюдать за состоянием удаленных систем и представлять информацию в пригодном для использования виде, приходится использовать инструментарий WMI, в частности, класс Win32_Process. Если вам казался достаточным объем данных, получаемых с помощью команды Get-Process, то посмотрите на выходные данных класса Win32_Process, которые показаны на рис. 2.

Рис. 2 Просмотр информации о процессах с помощью инструментария WMI

Что же делать бедному сетевому администратору, если все, чего он хочет — это получить удобный для понимания отчет об использовании памяти? Прежде всего — отказаться от стереотипов мышления, выйти из своей оболочки и овладеть мастерством автоматизации Excel. Почти наверняка на вашем компьютере установлен Microsoft Office Excel. Вы, как и мы, не являетесь экспертом по работе в нем, но Excel — это часть системы Microsoft Office, которую можно использовать для своих задач.

Насколько тяжело автоматизировать Excel? Как выясняется, довольно просто: корпорация Майкрософт создала модель автоматизации специально для работы с Excel. Код программы — Excel.Application, который является COM-объектом. Когда создается экземпляр объекта Excel.Application, то запускается Excel, который по умолчанию остается невидимым; тем не менее, его можно сделать видимым при помощи свойства visible.

Проделав это, на экране появится приложение Excel довольно странного вида, напоминающее скорее пустую оболочку вместо привычного вида Excel (см. рис. 3). В нем нет ни рабочих книг, ни листов электронной таблицы — ничего, только голый Excel.

Рис. 3 Голый Excel — без рабочих книг и электронных таблиц

После того как к Excel.Application была добавлена рабочая книга, а в ячейку помещены данные, приложение Excel выглядит так: рис. 4.

Рис. 4 Присвоение значения ячейке

Теперь с помощью всех этих знаний давайте попробуем сделать что-нибудь полезное. Соберем информацию о работающих процессах посредством инструментария WMI, запишем названия процессов и занимаемую ими память в электронную таблицу Excel, а затем построим диаграмму, чтобы наглядно показать использование памяти. Именно это делает скрипт WriteProcessInformationToExcel.ps1. Полный текст скрипта находится на веб-сайте журнала TechNet.

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

Теперь переименуем оставшуюся таблицу. Дело в том, что если вы решите использовать объекты данных ActiveX (ADO) для запросов к таблицам Excel, то название таблицы нужно будет передавать в строке подключения. Чтобы облегчить создание интуитивно понятного и надежного кода, необходимо выбрать логически обоснованное название для электронной таблицы. Чтобы переименовать нужную таблицу, достаточно присвоить новое значение свойству name. Переименуем первую электронную таблицу в «Processes», как показано ниже:

Теперь нужно получить ссылку на переименованную таблицу. Для этого используется метод Item объекта worksheets. В качестве параметра передается название таблицы:

Следующие четыре строчки кода определяют четыре типа перечисления. Типы перечислений нужны для того, чтобы задать множество величин, допустимых для определенных настроек программы Excel. Например, при помощи типа перечислений xlLineStyle задается тип выводимой линии: двойная, пунктирная и так далее. Значения типов перечислений описаны в MSDN.

Чтобы облегчить чтение кода, можно создать псевдонимы для каждого из четырех используемых типов перечислений. Для этого нужно преобразовать строку, представляющую собой название типа перечисления, в тип ([type]). Вообще-то это довольно хитрый прием:

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

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

Заполнив электронную таблицу, можно отрегулировать размер столбцов в соответствии с размером находящихся в ячейках данных. Для этого можно было бы создать диапазон, указав координаты используемых столбцов; а можно просто воспользоваться свойством электронной таблицы usedRange. Когда объект типа диапазон создан, свойство EntireColumn и метод AutoFit помогут изменить размер столбцов. Поскольку этот метод всегда возвращает какие-то данные, перенаправим его вывод в командлет Out-Null. В результате ненужная информация не будет выводиться в окно командной строки. Вот этот код:

Здесь можно было бы остановиться: у нас уже есть удобная электронная таблица с названиями процессов и количеством потребляемой ими памяти. Но мы сделаем еще и диаграмму. Это просто. Воспользуемся методом Add объекта диаграмма, чтобы добавить ее к рабочей книге. Поскольку этот метод тоже возвращает ненужную информацию, пропустим результат через командлет Out-Null, как показано здесь:

А теперь давайте покрутим круговую диаграмму. Свойство rotation объекта ActiveChart позволяет нам сделать это. Счетчик увеличивается в цикле до 360 с шагом 15. В окружности 360 градусов; диаграмма поворачивается на 15 секунд. Выглядит неплохо. Вот код, с помощью которого это было сделано:

После работы скрипта на экране появляется разорванная круговая диаграмма, как показано на рис. 5.

Рис. 5 Разорванная круговая диаграмма процессов

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

date

21.05.2021

directory

Active Directory, PowerShell

comments

комментариев 157

Get-ADUser это один из основных командлетов PowerShell, который можно использовать для получения различной информации о пользователях Active Directory и их атрибутах. С помощью командлета Get-ADUser можно получить значение любого атрибута учетной записи пользователя AD, вывести список пользователей в домене с нужными атрибутами и экспортировать их в CSV, и использовать различные критерии для выборки доменных пользователей.

Комадлет Get-ADUser доступен начиная с PowerShell 2.0 и входит в специальный модуль для работы с Active Directory — Active Directory Module for Windows PowerShell (представлен в Windows Server 2008 R2). Командлеты модуля RSAT-AD-PowerShell позволяют выполнять различные операции с объектами каталога AD.

Примечание. Ранее для получения информации об атрибутах учетных записей пользователей AD приходилось использовать различные инструменты: консоль ADUC (в том числе сохраненные запросы AD), vbs скрипты, утилиту dsquery и т.п. Все эти инструменты может с лёгкостью заменить командлет Get-ADUser.

В этом примере мы покажем, как с помощью командлета PowerShell Get-ADUser получить информацию о времени последней смены пароля пользователя, когда истекает срок действия пароля и другие данные пользователей.

Как найти пользователя в AD и вывести его свойства с помощью Get-ADUser?

Для использования модуля RSAT-AD-PowerShell нужно запустить консоль PowerShell с правами администратора и импортировать модуль командой:

В Windows Server 2012 и выше модуль RSAT-AD-PowerShell устанавливается по-умолчанию при развертывании на сервере роли Active Directory Domain Services (AD DS). Для установки модуля на рядовом сервере домена нужно выполнить команду:

Install-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature

Установка модуля RSAT-AD-PowerShell

В десктопных версия Windows (например, в Windows 10) для работы коммандера Get-AdUser нужно установить соответствующую версию RSAT и включить в Панели Управления компонент Active Directory Module for Windows PowerShell (Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> AD DS Tools).

RSAT включить модуль Active Directory Module for Windows PowerShell

Вы можете установить модуль AD из PowerShell:

Add-WindowsCapability –online –Name “Rsat.ActiveDirectory.DS-LDS.Tools

Также есть способ использования модуля RSAT-AD-PowerShell без его RSAT установки на компьютере. Достаточно скопировать основные файлы и импортировать модуль в сессию PoSh:

Import-Module "C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.dll"
Import-Module "C:\PS\ADPoSh\Microsoft.ActiveDirectory.Management.resources.dll"

Полный список всех аргументов командлета Get-ADUser можно получить так:

Для использования командлета Get-ADUser не обязательно использовать учетную запись с правами администратора домена. Любой авторизованный пользователь домена AD может выполнять команды PowerShell для получения значений большинства атрибутов объектов AD (кроме защищенных, см. пример с LAPS). Если нужно выполнить команду Get-ADUser из-под другой учетной записи, используйте параметр Credential.

Чтобы вывести список всех учетных записей домена, выполните команду:

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

Get-ADUser -filter вывести всех пользователей домена

По-умолчанию командлет Get-ADUser возвращает только 10 основных атрибутов (из более чем 120 свойств учетных записей пользователей): DistinguishedName, SamAccountName, Name, SID, UserPrincipalName, ObjectClass, статус аккаунта (Enabled: True/False согласно атрибуту UserAccountControl), и т.д.

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

Чтобы выполнить запрос на конкретном контроллере домена используется параметр – Server:

Get-ADUSer –Server DC01.winitpro.loc –Identity tstuser

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

Get-ADUser -identity tuser -Properties *

Get-ADUser -Properties * - вывести список всех атрибутов и значения доменного пользователя

Командлет Get-ADUser с параметром Properties * вывел список всех атрибутов пользователя AD и их значения.

Попробуем изменить параметры команды Get-ADUser, чтобы вывести только нужные нам атрибуты пользователя. Можно вывести сразу несколько атрибутов пользователя:

  • PasswordExpired
  • PasswordLastSet
  • PasswordNeverExpires
  • lastlogontimestamp

Get-ADUser tuser -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires, lastlogontimestamp

Get-ADUser вывести дату смены пароля (PasswordLastSet) и время последнего входа в домен (lastlogontimestamp)

Теперь в информации о пользователе есть данные о статусе аккаунта (Expired:True/False), дате смены пароля и времени последнего входа в домен (lastlogontimestamp). Представим информацию в более удобном табличном виде и уберем все лишние атрибуты с помощью Select-Object –Property или Format-Table:

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser вывести атрибуты пользователей в табличном виде

Получение пользователей из нескольких OU с помощью Get-ADUser

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

Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires | ft Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

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

$OUs = "OU=Moscow,DC=winitpro,DC=local","OU=SPB,DC=winitpro,DC=loc"
$OUs | foreach

Получить Email адреса пользователей из AD

Email пользователя это один из атрибутов в Active Directory. Чтобы вывести список email адресов пользователей, вы должны добавить поле EmailAddress в выбираемые поля командлета Get-ADUser.

Get-ADUser -filter * -properties EmailAddress -SearchBase ‘OU=MSK,DC=winitpro,DC=loc’| select-object Name, EmailAddress

Get-ADUser список email адресов

Вывести список активных учёток с почтовыми адресами:

Get-ADUser -Filter <(mail -ne "null") -and (Enabled -eq "true")>-Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Format-Table

Список пользователей, у которые нет email адреса:

Get-ADUser -Filter * -Properties EmailAddress | where -Property EmailAddress -eq $null

Следующий пример позволяет выгрузить адресную книгу email адресов компании в виде csv файла, который в дальнейшем можно импортировать в Outlook или Mozilla Thunderbird:

Get-ADUser -Filter <(mail -ne "null") -and (Enabled -eq "true")>-Properties Surname,GivenName,mail | Select-Object Name,Surname,GivenName,mail | Export-Csv -NoTypeInformation -Encoding utf8 -delimiter "," $env:temp\mail_list.csv

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

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

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

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

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

Get-ADUser –Filter: Сортировка и фильтрация списка пользователей AD

С помощью параметра –Filter вы можете фильтровать список пользователей по одному или нескольким атрибутам. В качестве аргументов этого параметра можно указать значения определённых атрибутов пользователей Active Directory. При использовании параметра –Filter командлет Get-ADUser выведет только пользователей, которые соответствуют критериям фильтра.

Например, выведем список активных (Enabled) учётных записей пользователей, чье имя содержит «Dmitry» (в примере ниже используется множественный фильтр, вы можете комбинировать условия с помощью стандартных логических операторов сравнения PowerShell):

Get-AdUser -Filter "(Name -like '*Dmitry*') -and (Enabled -eq 'True')" -Properties * |select name,enabled

Filter командлета Get-AdUser, множественная фильтрация

Дополнительно с помощью sort-object вы можете отсортировать полученный список пользователей по определенному атрибуту. Кроме того, для выборки пользователей можно использовать командлет where. Здесь также можно использовать сразу несколько критериев фильтрации.

Get-ADUser -filter * -properties PasswordExpired, PasswordLastSet, PasswordNeverExpires -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’| where | sort-object PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires

Get-ADUser фильтр с помощью where-object

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

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

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

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

Чтобы подсчитать общее количество всех аккаунтов в Active Directory:

Список всех активных (не заблокированных) учетных записей в AD:

Get-ADUser -Filter | Select-Object SamAccountName,Name,Surname,GivenName | Format-Table

get-aduser -Filter * -Properties Name, WhenCreated | Select name, whenCreated

Вывести всех пользователей, которые были созданы за последние 24 часа (пример отсюда):

$lastday = ((Get-Date).AddDays(-1))
Get-ADUser -filter

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

Get-ADUser -filter -properties name,passwordExpired | where |select name,passwordexpired

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

Задача: для списка учетных записей, которые хранятся в текстовом файле (по одной учетной записи в строке), нужно получить телефон пользователя из AD и выгрузить информацию в текстовый csv файл (для дальнейшего формирования отчета в Exсel).

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

$90_Days = (Get-Date).adddays(-90)
Get-ADUser -filter

$user = Get-ADUser winadmin -Properties thumbnailPhoto
$user.thumbnailPhoto | Set-Content winadmin.jpg -Encoding byte

Список групп, в которых состоит учетная запись пользователя

Get-AdUser winadmin -Properties memberof | Select memberof -expandproperty memberof

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

Get-ADUser -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Filter * -properties memberof | Where-Object

Вывести список компьютеров домена, на которые разрешено входить пользователю (ограничение через атрибут LogonWorkstations):

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

Читайте также: