У цій статті ми покажемо, як отримати доступ до даних з PowerShell безпосередньо з файлів Excel. Можливості прямого апеляції PowerShell для даних Excel відкриває широкі можливості для інвентаризації та побудови різних комп'ютерів, серверів, інфраструктури, активного каталогу тощо.D.
Зміст:
- Доступ до даних в Excel з консолі PowerShell
- Як отримати дані з Active Directory та зберегти їх у Excel?
Перш ніж показати, як зв’язатися з даними у комірці файлу Excel, необхідно врахувати архітектуру рівня презентації в документі Excel. На наступному малюнку показано 4 вкладені рівні в моделі об'єкта Excel:
- Шар додатків - вдосконалена додаток Excel;
- Рівень книги (шар робочої книги) - кілька книг (документи Excel) можна одночасно відкрити;
- Рівень листя (шар робочого аркуша) - У кожному файлі XLSX може бути кілька аркушів;
- Клітини (діапазон шару) - Тут ви можете отримати доступ до даних у певній комірці або діапазоні комірок.
Доступ до даних в Excel з консолі PowerShell
Розглянемо на простому прикладі, як отримати доступ до PowerShell доступ до даних у файлі Excel зі списком працівників.
Спочатку вам потрібно запустити програму Excel на комп'ютері (шар додатка) через об'єкт COM:
$ Excelobj = new -Object -Comobject Excel.Застосування
Після виконання цієї команди на комп’ютері додаток Excel запускається на задньому плані. Щоб зробити вікно Excel видимим, вам потрібно змінити властивість Видимий Com об’єкт:
$ Excelobj.Видимий = $ true
$ Excelobj | Фль
Тепер ви можете відкрити файл (книга, робоча книга) Excel:
$ Excelworkbook = $ excelobj.Робочі зошита.Відкрити ("C: \ ps \ ad_users.xlsx ")
Кожен файл Excel може мати кілька аркушів (робочі таблиці). У поточній книзі Excel ми відобразимо список аркушів:
$ Excelworkbook.Аркуші | FL Ім'я, Індекс
Тепер ви можете відкрити певний аркуш (за іменем або на індекс):
$ Excelworksheet = $ excelleworkbook.Простирадла.Елемент ("ad_user_list")
Поточний (активний) лист Excel можна знайти:
$ Excelworkbook.ActiveSheet | FL Ім'я, Індекс
Тепер ви можете отримати значення з комірок документа Excel. Ви можете використовувати різні способи звернення до комірок у книзі Excel: через діапазон (діапазон), комірка (комірка), стовпці (стовпці) або лінія (ress). Нижче я наводив різні приклади отримання даних з однієї клітини:
$ Excelworksheet.Діапазон ("B2").Текст
$ Excelworksheet.Діапазон ("B2: B2").Текст
$ Excelworksheet.Діапазон ("B2", "B2").Текст
$ Excelworksheet.Клітини.Пункт (2, 2).Текст
$ Excelworksheet.Клітини.Пункт (2, 2).Значення2
$ Excelworksheet.Колони.Пункт (2).Ряди.Пункт (2).Текст
$ Excelworksheet.Ряди.Пункт (2).Колони.Пункт (2).Текст
Як отримати дані з Active Directory та зберегти їх у Excel?
Розглянемо практичний приклад використання даних про доступ від PowerShell. Наприклад, нам потрібно отримати інформацію з Active Directory для кожного користувача у файлі Excel. Наприклад, його телефон (атрибут TelephonheNumber), відділ (відділ) та електронна адреса (пошта).
Щоб отримати інформацію про атрибути користувача в AD, ми будемо використовувати команду Get-Duser з модуля AD PowerShell. # Імпорт модуля Active Directory на сеансі PowerShell
Імпорт-модуль ActiveDirectory
# Спочатку відкрийте книгу Excel:
$ Excelobj = new -Object -Comobject Excel.Застосування
$ Excelworkbook = $ excelobj.Робочі зошита.Відкрити ("C: \ ps \ ad_users.xlsx ")
$ Excelworksheet = $ excelleworkbook.Простирадла.Елемент ("ad_user_list")
# Ми отримуємо кількість заповнених рядків у файлі XLSX
$ Rowcount = $ excelworksheet.Ussedrange.Ряди.Рахувати
# Ми розбираємо всі рядки у стовпці 1, починаючи з другого рядка (ці комірки вказують на назву вибухової печі)
for ($ i = 2; $ i --le $ rowcount; $ i ++)
$ Adusername = $ excelworksheet.Колони.Пункт (1).Ряди.Елемент ($ i).Текст
# Ми отримуємо значення атрибутів користувача в AD
$ Aduserprop = get-douser $ adusername-properties teleponsementumber, відділ, пошта | Виберіть -Object Name, TelephoneNemer, відділ, пошта
#Зафіксуйте клітини з AD
$ Excelworksheet.Колони.Пункт (4).Ряди.Елемент ($ i) = $ aduserprop.Телефонний номер
$ Excelworksheet.Колони.Пункт (5).Ряди.Елемент ($ i) = $ aduserprop.департамент
$ Excelworksheet.Колони.Пункт (6).Ряди.Елемент ($ i) = $ aduserprop.Пошта
#Save xls файл і закрити Excel
$ Excelworkbook.Зберегти ()
$ Excelworkbook.Закрити ($ true)
Як результат, у файлі Excel для кожного користувача додали стовпці з інформацією AD.
Розглянемо інший приклад побудови звіту за допомогою PowerShell та Excel. Припустимо, вам потрібно створити звіт про Excel на службі Print Spooler на всіх доменних серверах.
Щоб отримати список серверів у рекламі, використовується команда Get-Domputer, а WinRM викликає командування для видалення стану обслуговування на серверах. # Створіть об'єкт Excel
$ Excelobj = new -Object -Comobject Excel.Застосування
$ Excelobj.Видимий = $ true
# Додайте робочу книгу
$ Excelworkbook = $ excelobj.Робочі зошита.Додати ()
$ Excelworksheet = $ excelleworkbook.Робочі таблиці.Пункт (1)
# Перейменуйте аркуш
$ Excelworksheet.Name = 'статус служби штулер'
# Заповніть капелюх столу
$ Excelworksheet.Клітини.Item (1.1) = 'Ім'я сервера'
$ Excelworksheet.Клітини.Елемент (1.2) = 'Ім'я служби'
$ Excelworksheet.Клітини.Елемент (1.3) = 'стан обслуговування'
# Виділіть таблицю таблиці з жиром. Встановіть розмір шрифту та ширину стовпців
$ Excelworksheet.Ряди.Пункт (1).Шрифт.Сміливий = $ true
$ Excelworksheet.Ряди.Пункт (1).Шрифт.Розмір = 14
$ Excelworksheet.Колони.Пункт (1).Ширина колонки = 25
$ Excelworksheet.Колони.Пункт (2).Ширина колонки = 25
$ Excelworksheet.Колони.Пункт (3).Ширина колонки = 25
# Ми отримуємо список усіх серверів Windows у домені
$ Computers = (get -dcoputer -filter 'eperatingsstym -like "*windows server*" -і увімкнено -eq "true"').Назва
$ лічильник = 2
# підключається до кожного комп'ютера та отримайте статус послуги
Foreach ($ computer in $ computers)
$ Result = inloke -Command -ComputErname $ computer -ScriptBlock get -Service Spooler | Виберіть ім'я, статус
#Захоплення комірок Excel з сервера
$ Excelworksheet.Колони.Пункт (1).Ряди.Елемент ($ лічильник) = $ результат.Pscoputername
$ Excelworksheet.Колони.Пункт (2).Ряди.Елемент ($ лічильник) = $ результат.Назва
$ Excelworksheet.Колони.Пункт (3).Ряди.Елемент ($ лічильник) = $ результат.Статус
$ лічильник++
# Зберегти отриманий звіт та закрити Excel:
$ Excelworkbook.Saveas ('c: \ ps \ сервісне звіт.xlsx ')
$ Excelworkbook.Закрити ($ true)
Обсяг можливостей доступу від PowerShell в Excel дуже широкий. Починаючи з простої побудови звітів, наприклад, від Active Directory та закінчення можливості створення сценаріїв PowerShell для оновлення даних в AD від Excel.
Наприклад, ви можете доручити працівникові персоналу реєстру користувачів у Excel. Потім, використовуючи сценарій PowerShell через Set-Duser, працівник може автоматично оновлювати дані користувачів у AD (достатньо, щоб делегувати користувачеві право змінити ці атрибути користувачів AD та показати, як запустити сценарій PS). Таким чином, ви можете підтримувати фактичну адресну книгу з поточною кількістю телефонів та позицій.