Для работы с Excel в среде powershell нужно использовать COM объект.
#Создаем новый объект $excel = New-Object -ComObject Excel.Application
При выполнении данного командлета произойдет запуск приложения Excel в скрытом состоянии, т.е. у нас будет висеть процесс Excel, но при этом самого приложения как такового мы не увидем. Для того чтобы увидеть работу приложения нужно обратиться к его свойству Visible и установить его в TRUE т.к. по умолчанию стоит FALSE
#Режим записи видимый $excel.Visible = $true
Далее после того как приложение открылось нужно создать книгу воспользовавшись свойством Workbooks и методом Add().
#Создаем книгу Excel $EWB = $excel.Workbooks.Add()
После создания книги нужно выбрать лист с которым будем работать в данной книге. Для этого воспользуемся свойством Worksheet и методом Item()передав ему номер листа с которым будем работать.
#Выбираем первый лист книги $EWS = $EWB.Worksheets.Item(1)
Зададим имя нашему листу для этого используем свойство Name и присвоим ему значение нового имени листа.
#Название листа книги $EWS.Name = 'Service'
Так как Excel это таблица и мы работаем с ее ячейками то используем свойство Cells и метод Item() для указания с какими ячейками данного листа мы будем работать. Отсчет начинается с 1.
#Первая строка ячеек $EWS.Cells.Item(1,1) = 'Status' $EWS.Cells.Item(1,2) = 'Name' $EWS.Cells.Item(1,3) = 'DisplayName'
В данном примере мы устанавливаем названия наших колонок которые в дальнейшем будем заполнять. Первый аргумент это номер строки с которой работаем, второй аргумент это ячейка в таблице. Перед тем как перебирать массив с данными и записывать все в таблицу нам нужна вспомогательная переменная которая будет ссылаться на начальную строку в таблице с дальнейшим увеличением в цикле для перехода на новую строку.
#Перебераем массив и вставляем в нужные ячейки листа $j = 2 foreach($arr in $srv) { #Если процесс запущен то зеленый иначе красный if($arr.Status -eq 4){ $EWS.Cells.Item($j,1) = 'Запущен' $color = 10 }else{ $EWS.Cells.Item($j,1) = 'Остановлен' $color = 3 } $EWS.Cells.Item($j,2) = $arr.Name $EWS.Cells.Item($j,3) = $arr.DisplayName $EWS.Cells.Item($j,1).Font.Bold = $true $EWS.Cells.Item($j,1).Font.ColorIndex = $color $j++ }
После того как книга заполнена нужными данными ее необходимо сохранить. Для этого используем метод Saveas() и передаем ему путь и имя файла для сохранения.
#Сохраняем книгу $EWB.Saveas('C:\Excel\services.xlsx')
После этого закрываем саму книгу воспользовавшить методом Close().
#Закрываем книгу $EWB.Close()
После того как закрыли книгу можно завершать работу приложения Excel использую метод Quit(). Тем самым освободив память в системе.
#Закрываем приложение Excel $excel.Quit()
У данного способа есть существенный недостаток это очень медленная работа экспорта данных в таблицу Excel, но за то можно создавать красивые отформатированные таблицы для конечного пользователя. Здесь представлен полный скрипт, который получает список всех служб на вашем компьютере и записывает их в ячейки таблицы Excel.
#Получаем список всех процессов $srv = Get-Service #Создаем новый объект $excel = New-Object -ComObject Excel.Application #Режим записи видимый $excel.Visible = $true #Создаем книгу Excel $EWB = $excel.Workbooks.Add() #Выбираем первый лист книги $EWS = $EWB.Worksheets.Item(1) #Название листа книги $EWS.Name = 'Service' #Первая строка ячеек $EWS.Cells.Item(1,1) = 'Status' $EWS.Cells.Item(1,2) = 'Name' $EWS.Cells.Item(1,3) = 'DisplayName' #Перебераем массив и вставляем в нужные ячейки листа $j = 2 foreach($arr in $srv) { #Если процесс запущен то зеленый иначе красный if($arr.Status -eq 4){ $EWS.Cells.Item($j,1) = 'Запущен' $color = 10 }else{ $EWS.Cells.Item($j,1) = 'Остановлен' $color = 3 } $EWS.Cells.Item($j,2) = $arr.Name $EWS.Cells.Item($j,3) = $arr.DisplayName $EWS.Cells.Item($j,1).Font.Bold = $true $EWS.Cells.Item($j,1).Font.ColorIndex = $color $j++ } #Сохраняем книгу $EWB.Saveas('C:\Excel\services.xlsx') #Закрываем книгу $EWB.Close() #Закрываем приложение Excel $excel.Quit()
Теги:
Поддержи проект:
И Вам спасибо за оценённый труд.