Частина 13. Управління процесами, послугами та сервери автоматизації за допомогою PowerShell

24.11.2023 6 хвилин Автор: Cyber Witcher

Автоматизація ІТ з PowerShell: Управління процесами та серверами

Управління процесами, послугами та серверами автоматизації за допомогою PowerShell – це фундаментальна здатність для будь-якого фахівця в сфері ІТ та кібербезпеки. PowerShell, розроблений Microsoft, є потужним інструментом для скриптингу та автоматизації, що дозволяє контролювати та управляти процесами та послугами на комп’ютерах та серверах. У цій статті ми розглядаємо, як використовувати PowerShell для моніторингу, запуску, зупинки та налаштування процесів та послуг, а також для управління серверами і їх конфігурацією.

Ви навчитеся застосовувати різноманітні команди та скрипти для ефективного управління ІТ-інфраструктурою. Ця стаття також надасть вам інформацію про створення скриптів для автоматизованого управління задачами, як-от регулярне оновлення серверів, моніторинг стану системи та виправлення помилок. Ви дізнаєтеся, як використовувати PowerShell для збору даних про систему, автоматизації рутинних задач та підвищення загальної продуктивності ІТ-операцій. У цьому розділі ми розглянемо проблеми, пов’язані із запуском із PowerShell із двома важливими компонентами операційної системи Windows: запущеними процесами та службами, що працюють у фоновому режимі.

Управління процесами

Основним графічним інструментом управління процесами на локальній машині є диспетчер завдань Windows (для запуску диспетчера завдань можна натиснути комбінацію клавіш <Ctrl>+<Shift>+<Esc>), на якій відображається інформація

Наприклад, якщо ви хочете дізнатися, що відбувається, ви можете зупинити їх і встановити пріоритет виконання (мал.13.1).

Диспетчер завдань Windows

У Windows також є консольні утиліти task1ist (перегляд списку процесів, запущених на локальному або віддаленому комп’ютері) і taskki11 (зупинка процесу):

PS С:\Users\andrv> tasklist /?
TASKLIST [/S <система> [/U <Ім'я користувача> [/Р [<пароль>]]]]
[/М [<модуль>] | /SVC | /V] [/FI <фильтр>] [/F0 <формат>] [/NH]
Опис: Відображає список процесів, які зараз виконуються на локальному або віддаленому комп'ютері.
PS С:\Users\andrv> taskkill /?
TASKKILL [/S <система> [/U <пользователь> [/P [<пароль>]]]]
{ [/FI <фильтр>] [/PID <процесс> | /1М <образ>] } [/Т] [/F]
Опис: Завершує процес за його ID (PID) або ім'ям образу.

Давайте подивимося, як PowerShell може впоратися з деякими типовими завданнями процесів.

Перегляд списку процесів

У PowerShell ви можете використовувати командлет GetProcess, щоб отримати список запущених процесів. Якщо ви запустите цей командлет без параметрів, ви побачите інформацію про всі запущені процеси:

PS С:\> Get-Process
Handles NPM(K) РМ (К) WS (К) VM(M) CPU(s) Id ProcessName
109 5 1128 7 92 32 0.06 1360 alg
506 6 2308 3604 29 20.34 628 csrss
67 3 832 436 29 1.52 1736 ctfmon
553 17 17220 11992 94 69.16 1164 explorer
33 2 3280 400 35 2.41 3192 Far

Кожен процес має об’єкт типу System. Діагностика. Процес; Командлет Get-Process за замовчуванням відображає кілька властивостей цих об’єктів (табл. 13.1).

За допомогою параметра -Name (це параметр за замовчуванням) ви можете відобразити інформацію про один або декілька процесів із певними назвами (а в назвах можна використовувати символи узагальнення).

У 2014 році Нідерланди Наприклад, наступна команда виведе всі процеси, назви яких починаються з літери s:

PS С:\> Get-Prooess s*
Handles NPM (К) PM (К) WS (K) VM(M) CPU(s) Id ProcessName
106 2 380 32 11 0.03 1880 scardsvr
134 4 1876 200 88 0.11 3640 sdlaunch
267 6 1504 1236 46 3.67 696 services
19 1 164 52 4 0.06 560 smss
71 2 1820 588 30 0.14 1352 SOUNDMAN
297 6 6924 1768 54 5.05 1304 spoolsv
134 3 1424 824 33 0.16 876 svchost
314 13 1768 1280 36 0.75 944 svchost
1185 45 12124 6532 83 14.59 1040 svchost
59 3 1124 740 27 1.23 1076 svchost
224 7 2356 788 38 0.27 1204 svchost
130 4 2392 1324 35 0.81 1952 svchost
517 0 0 52 1 26.75 4 System

Щоб відсортувати або відфільтрувати список процесів, використовуйте командлети Sort-Object, Where-Object і Se1ect-Object, як зазвичай. Наприклад, у наведеному нижче конвеєрі інструкцій відображаються п’ять процесів, які витрачають найбільше процесорного часу:

PS С:\> Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
Handles NPM(K) PM(K) WS (K) VM(M) CPU(s) Id ProcessName
619 19 21044 23156 110 171.19 1164 explorer
790 50 59228 11788 191 93.17 1520 kavsvc
476 14 10320 111'20 129 88.25 2860 OUTLOOK
448 19 61204 23412 165 83.59 3884 wjview
411 12 9780 8920 250 61.95 3484 WINWORD

Для перегляду повної інформації про один або декілька процесів можна скористатися командлетом Format-List, відобразивши всі властивості об’єкта System. Diagnostics. Process. Наприклад:

PS С:\> Get-Process outlook | Format-List *

Для отримання списку процесів на віддалених машинах потрібно вказати їхні імена або IP-адреси як значення -сотриterName.

Визначення бібліотек, що використовуються процесом

Об’єкти System. Diagnostics. Process, що повертаються командлетом Get-Process, є властивість Modules, що містить список динамічних бібліотек, що використовуються відповідними процесами. Для перегляду цього списку можна обробляти дані об’єкти командлетом Select-Object З -ExpandProperty. Наприклад, наступний конвеєр команд виводить список усіх динамічних бібліотек, що використовуються оболонкою PowerShell (процес з ім’ям powershell)

PS С:\> Get-Process powershell | Select-Object -expandproperty modules |
Format-Table
Size(K) ModuleName FileName
452 powershell.exe
C:\WINDOWS\System32\WindowsPowerShell\vl.OXpowershell.exe
2004 ntdll.dll C:\WINDOWS\SYSTEM32\ntdll.dll
756 KERNEL32.DLL C:\WINDOWS\System32\KERNEL32.DLL
2848 KERNELBASE.dll C:\WINDOWS\System32\KERNELBASE.dll
632 msvcrt.dll C:\WINDOWS\System32\msvcrt.dll
820 OLEAUT32.dll C:\WINDOWS\System32\OLEAUT32.dll
628 msvcp_win.dll C:\WINDOWS\System32\msvcp_win.dll
1024 ucrtbase.dll C:\WINDOWS\System32\ucrtbase.dll
116 ATL.DLL C:\WINDOWS\SYSTEM32\ATL.DLL
3412 combase.dll C:\WINDOWS\System32\combase.dll

Зупинка процесів

Щоб зупинити процес на локальній машині, ви можете скористатися командлетом Stop-Process, який має псевдонім ki11. За замовчуванням використовується параметр Id, який вимагає вказати ID процесу, який потрібно зупинити (нагадаємо, що знайти ID процесу можна за допомогою командлета Get-Process). Наприклад, наступна команда зупинить процес з ідентифікатором 764:

PS С:\> Stop-Process 764

Щоб зупинити процес із певним ім’ям, скористайтеся параметром -Name командлета Stop-Process. Наприклад, наступна команда зупинить всі процеси з іменем блокнота:

PS С:\> Stop-Process -Name notepad

Параметр -Confinn командлета Stop-Process вмикає режим підтвердження, коли процеси зупинено. При цьому на екрані виводиться як ім’я, так і ідентифікатор зупиненого процесу, наприклад:

PS С:\Users\andrv> Stop-Process -Name notepad -Confirm
Подтверждение<br />Вы действительно хотите выполнить это действие?<br />Выполнение операции ’’Stop-Process" над целевым объектом "notepad (2812)".<br />[Y] Да - Y [А] Да для всех - A [N] Нет - N [L] Нет для всех - L [S]<br />Приостановить - S [?] Справка<br />(значением по умолчанию является "Y"):Y<br />Подтверждение<br />Вы действительно хотите выполнить это действие?<br />Выполнение операции "Stop-Process" над целевым объектом "notepad (13984)".<br />[Y] Да - Y [А] Да для всех - A [N] Нет - N [L] Нет для всех - L [S]<br />Приостановить - S [?] Справка<br />(значением по умолчанию является "Y"):Y<br />

За замовчуванням командлет Stop-Process не пропускає об’єкти, які відповідають процесам, зупиненим далі по конвеєру, і тому на екрані нічого не відображається. Щоб зупинити процеси з виведенням інформації, вкажіть параметр -PassThru, наприклад:

PS С:\> Stop-Process -Name notepad -PassThru
Handles NPM(K) PM (К) WS(K) VM(M) CPU(s) Id ProcessName
26 2 624 2172 24 2224 notepad

Запуск процесів

Щоб запустити процес з PowerShell, можна просто вказати шлях до відповідного виконуваного файлу, наприклад:

PS С: \> С: \WINDOWS\system32\notepad.ехе

Ви також можете запустити процес за допомогою командлета Invoke-Item, вказавши шлях до потрібного файлу як аргумент. Параметр -Confinn дозволяє запускати процес лише після того, як користувач підтвердить:

PS С:\> Invoke-item C:\WINDOWS\system32\notepad.exe -Confirm
Подтверждение<br />Вы действительно хотите выполнить это действие?<br />Выполнение операции "Вызов элемента" над целевым объектом "Элемент:<br />С:\WINDOWS\system32\notepad.exe".<br />[Y] Да - Y [А] Да для всех - A [N] Нет - N [L] Нет для всех - L [S]<br />Приостановить - S [?] Справка<br />(значением по умолчанию является "Y"):Y

Однак командлет Invoke-Item не повертає об’єкт, який відповідає запущеному процесу, тому ми не можемо програмно визначити, скажімо, ідентифікатор, присвоєний системою процесу. Тому краще запускати процеси на локальній машині за допомогою спеціального командлета Start-Process. Шлях до виконуваного файлу або скрипту для запуску вказується в параметрі -FilePath:

PS С:\Users\andrv> Start-Process -FilePath notepad.exe

Параметри команди Start-Process дозволяють передавати аргументи запускається процесу, перенаправляти його вхідні і вихідні потоки, вказувати рахунок і визначати тип вікна для процесу і так далі.

Типово, Start-Process лише запускає процес, нічого не повертаючи. Якщо ви хочете повернути об’єкт, який відповідає новому процесу, вам слід використовувати перемикач -PassThru:

PS С:\Users\andrv> $prooess = Start-Process -FilePath notepad.exe -PassThru
PS C:\Users\andrv> $process.GetType().FullName
System.Diagnostics.Process

Відзначимо, що за допомогою Start-Process можна не тільки запускати виконувані файли, але і виконувати дії, пов’язані з іншими типами файлів. Наприклад, створимо текстовий файл l.txt і почнемо його друк, виконавши команду Start-Process з дією  Print:

PS С:\Users\andrv> "File content" > l.txt
PS C:\Users\andrv> Start-Process -FilePath .\l.txt -Verb Print

Давайте також розглянемо метод Create( ) WMI-kJIacca Win32 Process, який можна використовувати для запуску процесів як на локальному, так і на віддаленому комп’ютері. Цей метод є конструктором класу Win32 Process, і для його виклику можна використовувати специфікатор [vniC1ass]. Для прикладу запустимо «Блокнот»:

PS С:\> $а = ([wmiClass] "win32_process").Create("notepad.exe")

Використовуючи командлет Get-Merrber, давайте подивимося, які властивості має об’єкт, що зберігається в змінній $a:

PS С:\> $а | Get-Member
TypeName: System.Management.ManagementBaseObject#\__ PARAMETERS
Name MemberType Definition
PSComputerName AliasProperty PSComputerName = SERVER
Processid Property uint32 Processid {get;set;}
ReturnValue Property uint32 ReturnValue {get;set;}
__ CLASS Property string CLASS {get;set;}
__ DERIVATION Property string}] DERIVATION {get;set;}
__ DYNASTY Property string DYNASTY {get;set;}
__ GENUS Property int GENUS {get;set;}
__ NAMESPACE Property string NAMESPACE {get;set;}
__ PATH Property string PATH {get;set;}
PROPERTY COUNT Property int PROPERTY_COUNT {get;set;}
__ RELPATH Property string RELPATH {get;set;}
__ SERVER Property string SERVER {get;set;}
SUPERCLASS Property string SUPERCLASS {get;set;}

Як бачите, нам доступна властивість ProcessId, в якій зберігається ID запущеного процесу.

Зміна пріоритетів виконання процесів

Система. Діагностика. Процес має встановлений метод PriorityC1ass, який дозволяє змінювати пріоритет процесу. Параметром цього методу повинна бути одна з наступних рядків: Normal, Idle, High, RealTime, BelowNormal, AboveNormal. Наприклад, давайте запустимо новий екземпляр Блокнота і за допомогою методу get PriorityC1ass перевіримо поточний пріоритет цього процесу:

PS С:\Users\andrv> $b = Start-Process -FilePath notepad.exe -PassThru
PS С:\> $b.get_PriorityClass()
Normal
Підвищимо тепер пріоритет до високого:
PS С: \> $b. set_PriorityClass (’’High")
PS С:\> $b.get_PriorityClass()
High

Завершення процесів, які не відповідають

У объектов System. Діагностика. Процес, який відповідає запущеним процесам, має властивість Responding, яка обчислюється як False, якщо процес не відповідає. Щоб завершити роботу всіх програм, які не відповідають, виберіть їх із натовпу за допомогою командлета Where-Object, а потім зупиніть їх за допомогою командлета Зупинити-процес:

PS С:\> Get-Process | Where-Object -not Responding | Stop-Process

Управління послугами

В операційній системі Windows служба – це процес, який запускається на комп’ютері у фоновому режимі для виконання певних дій у відповідь на запити користувача. Наприклад, служба веб-сервера працює у фоновому режимі, очікуючи отримання NTTR-запитів від клієнтів. При надходженні такого запиту сервіс відповідає, відправляючи запитуваний файл клієнту або виконуючи певну дію. Зміст сервісів залежить від версії операційної системи та встановлених на ній додатків.

Основним інструментом адміністрування служб в графічному режимі на локальному комп’ютері є консоль служб, яка розташована в групі «Адміністрування» панелі управління (див. мал. 13.2).

Консоль керування комп’ютером використовується як утиліта, яку можна використовувати для керування службами як на локальних, так і на віддалених машинах. Windows також включає стандартні утиліти оболонки cmd.exe для адміністрування служб: net start і net stop.

Консоль для керування службами

Давайте розглянемо способи використання PowerShell для вирішення деяких типових завдань, пов’язаних з обслуговуванням.

Переглянути перелік послуг

Щоб отримати список послуг, зареєстрованих на локальному комп’ютері, скористайтеся командлетом Get-Service:

PS С:\> Get-Service
Status Name DisplayName
Running Alerter Оповещатель
Running ALG Служба шлюза уровня приложения
Stopped AppMgmt Управление приложениями
Stopped aspnet state ASP.NET State Service
Running AudioSrv Windows Audio
Stopped BITS Фоновая интеллектуальная служба
Stopped Browser Обозреватель компьютеров
Stopped cisvc Служба индексирования
Stopped ClipSrv Сервер папки обмена

Як бачите, за замовчуванням відображається ім’я сервісу (стовпець Name), його коротке ім’я (стовпець Disp1ayName) і статус (стовпець Status).

Командлет Get-Service має параметри -Name і -Disp1ayName, які підтримують шаблони. Наприклад, у наведеній нижче команді перелічено служби, назви яких починаються з win:

Якщо ви хочете відобразити тільки ті служби, які запущені в даний момент, вам потрібно відфільтрувати об’єкти, значенням властивості Status є рядок Runing:

PS С:\> Get-Service | Where-Object Status -eq "Running”

Для перегляду служб, зареєстрованих на віддаленому комп’ютері, необхідно вказати його ім’я як значення параметра -ComputerName.

Зупинка та призупинення служб

Локальну службу можна зупинити за допомогою командлета Stop-service (PowerShell має запускатися від імені адміністратора). Параметр -Name вказує назву служби, яку слід зупинити (тут можна використовувати символи узагальнення), параметр -Force дозволяє зупинити вказану службу разом з усіма службами, які від неї залежать.

Наприклад, наступна команда зупинить службу LanmanServer (яка підтримує онлайн-обмін файлами та принтерами) з усіма службами, які від неї залежать:

PS С:\> Stop-Service -Name LanmanServer -Force

За замовчуванням командлет stop-Service не пропускає об’єкти, які відповідають службам, зупиненим далі по конвеєру, і тому на екрані нічого не відображається. Щоб зупинити сервіси з виведенням інформації, потрібно вказати параметр -PassThru, наприклад:

PS С:\> Stop-Service -Name LanmanServer -Force -PassThru
Status Name DisplayName
Stopped LanmanServer Сервер

Ви можете скористатися командлетом Suspend-Service для призупинення роботи однієї або декількох служб, назви яких вказано як значення параметра -Na•ne. Коли служба призупинена (тимчасово зупинена), служба продовжує працювати, але її дії призупиняються до отримання команди на відновлення (див. наступний розділ).

Варто враховувати, що не кожну послугу можна призупинити. У объектов System. ServiceProcess . SernceContr011er, які відповідають службам, має булеву властивість під назвою CanPauseAndContinue, для якої встановлено значення True, якщо службу можна призупинити. Наведена нижче команда призупинить усі служби, які відповідають вимогам:

PS С:\> Get-Service | Where-Object {$_•CanPauseAndContinue} | Suspend-Service -
PassThru
Status Name DisplayName
Paused Irmon Монитор инфракрасной связи
Paused lanmanserver Сервер
Paused lanmanworkstation Рабочая станция
Paused Schedule Планировщик заданий
Paused seclogon Вторичный вход в систему
Paused ShellHWDetection Определение оборудования оболочки
Paused TapiSrv Телефония
Paused winmgmt Инструментарий управления Windows

Запуск і перезапуск служб

Ви можете запустити службу на локальному комп’ютері за допомогою командлета StartService. Значенням параметра -Name є назва служби, яку потрібно запустити. Як і у випадку з попередніми командлетами *-Service, після запуску служби повідомлення не відображається; Щоб виправити ситуацію, ви можете скористатися опцією -PassThru. Наприклад, наступна команда запускає службу LaTanServer і відображає інформацію про неї:

PS С:\> Start-Service -Name LanmanServer -PassThru
Status Name DisplayName
Running Spooler Диспетчер очереди печати

Командлет служби перезапуску перезапускає (тобто зупиняє і запускає) служби, які вказано як значення параметра -Name або які було передано з інших командлетів. Наприклад, наступний командний конвеєр перезапускає всі мережеві служби, ім’я яких починається з рядка net: PS за допомогою:

PS С:\> Get-Service -Name net* | Restart-Service

Зміна налаштувань служби

PowerShell має командлет під назвою Set-Service, який дозволяє редагувати деякі параметри служби на локальному або віддаленому комп’ютері:

  • ІМ’Я, що відображається (параметр DisplayName);

  • Опис (параметр Description);

  • Тип запуску (параметр StartupType), можливі значення—Automatic (служба запускається автоматично), Manual (служба запускається вручну), Disabled (служба відключена).

Назви служб, які потрібно змінити, вказуються як значення параметра -Name (назви можуть містити символи узагальнення). Наприклад, ми змінимо режим запуску серверної служби LarnanServer. Давайте розглянемо всі властивості цього сервісу:

PS С:\> Get-Service LanmanServer | Format-List *

Як бачите, тепер ця служба запускається автоматично (значення властивості StartType – Automatic). Давайте скористаємося командлетом Set-Service, щоб змінити режим запуску служби LamnanServer з автоматичного на ручний:

PS С:\> Set-Service -Name LanmanServer -StartupType Manual

Давайте ще раз подивимося на властивості сервісу LarnanServer, щоб перевірити внесені зміни:

PS С:\Users\andrv> Get-Service LanmanServer | Format-List Name, StartType
Name : LanmanServer
StartType : Manual

Як бачимо, значення властивості StartType успішно змінено.

Зауважте, що опис служби не є властивістю Системних об’єктів. ServiceProcess . ServiceContr011er повертається командлетом Get-Service. Іншими словами, командлет Get-Service не дозволяє побачити опис конкретної послуги.

Вирішити цю проблему можна за допомогою WMl-uacca Win32 Service, який має властивість Description. Давайте подивимося, яке значення цієї властивості для сервісу LanmanServer:

PS С:\> Get-WtaiObject win32_service -Filter "name = 'LanmanServer'" |
Format-List Name, Description

Робота з серверами автоматизації

У главі 11 ми розглянули приклад використання методів, що надаються зовнішніми COM-об’єктами, для вирішення проблеми створення ярлика на робочому столі. Цей стандарт для програмних компонентів, Component 0bject Model (COM), став основою для технології зв’язування та вбудовування 0bject (OLE), яка спочатку використовувалася в Windows для зв’язку між програмами.

Спочатку OLE використовувався для створення складених документів, а потім для вирішення більш загальної проблеми надання додаткам власних функцій (сервісів) один одному і правильного використання цих функцій. Технологія, яка дозволяє одному додатку (компоненту автоматизації) викликати функції іншого додатка (сервера автоматизації), отримала назву OLE Automation.

З середини 1990-х років термін OLE був замінений новим терміном ActiveX, який спочатку означав (об’єкти), засновані на технології COM. До появи платформи .NET ActiveX був ключовою технологією в продуктах Microsoft.

Одним з найбільш поширених і часто використовуваних серверів автоматизації в Windows є пакет додатків Microsoft 0f6ce. Ми розглянемо приклади того, як можна виводити інформацію з PowerShell у дві найпоширеніші програми PowerShell: Microsoft Word і Microsoft Excel. Однак перш за все скажемо кілька слів про об’єктних моделях, представлених цими програмами.

Об’єктні моделі Microsoft Word і ExceI

Для того, щоб використовувати можливості Word і Excel від PowerShell, необхідно знати, які об’єкти виставляються для зовнішнього використання цими серверами автоматизації і як ці об’єкти співвідносяться один з одним.

Хоча об’єктні моделі різних додатків Microsoft 0ffce досить великі, вони схожі між собою, і для практичних цілей досить розуміти, як працювати з декількома ключовими об’єктами. Замість того, щоб детально розповідати про властивості та методи об’єктів Word і Excel, ми лише коротко згадаємо, які об’єкти будуть використовуватися в наступних прикладах сценаріїв.

На самому верхньому рівні об’єктної моделі Word знаходиться об’єкт App1ication, який безпосередньо представляє сам додаток Word і містить (як властивості) всі інші об’єкти. Таким чином, об’єкт App1ication використовується для доступу до будь-якого іншого об’єкта Word.

Сімейство Docuents є властивістю об’єкта App1ication і містить набір Docuents, кожен з яких відповідає документу, відкритому в Word. Для створення нових документів нам знадобиться клас Docunents у скриптах. Об’єкт Document містить як свої властивості сімейство різних об’єктів документа: Символи, Слова, Речення, Абзаци, Закладки тощо.

Об’єкт Se1ection дозволяє працювати з виділеним фрагментом тексту (цей фрагмент може бути порожнім). Таким чином, можна сказати, що об’єкт Se1ection відкриває шлях до документа, оскільки надає доступ до виділеної частини документа. Зокрема, об’єкт Se1ection має метод TypeText (Текст), який можна використовувати для вставки тексту в документ. За допомогою властивостей цього об’єкта (які в свою чергу можуть бути об’єктами зі своїми властивостями) можна управляти параметрами виділення, такими як установка потрібного розміру шрифту і гарнітури, центрування абзаців і так далі.

Об’єктна модель Excel будується за тим же принципом, що і об’єктна модель Word. Основним об’єктом, який містить всі інші, є App1ication. Нагадаємо, що окремі файли в Excel називаються книгами. Сімейство «Книги» в Excel є аналогом сімейства «Документи» в Word і містить набір об’єктів «Книга» (аналог об’єкта «Документація» в Word), кожен з яких відповідає книзі, відкритій в Excel. Нова книга створюється за допомогою методу Add() об’єкта Workbooks.

Excel використовує властивість Ce11s об’єкта App1ication для доступу до клітинок активного аркуша. Для отримання або зміни значення окремої комірки використовується конструкція Ce11s. Домашня тварина (ряд, co1itp) . Va1ue, де рядок і co1spp – номери рядків і стовпців відповідно, на перетині яких знаходиться ця осередок.

В Excel, як і в Word, є об’єкт. Se1ection, що дозволяє працювати з виділеним фрагментом електронної таблиці. Найпростішим способом ізолювати діапазон комірок на активному аркуші є використання методу Se1ect( ) об’єкта Range. Наприклад, вираз Range ( «A1 : С1») . Se1ect ( ) дозволяє виділити три суміжні комірки: A1, B1 і C1.

Для того щоб зрозуміти, який об’єкт Word або Excel слід використовувати для вирішення того чи іншого завдання, часто найпростіше виконати необхідні маніпуляції вручну у відповідному додатку, попередньо включивши режим запису макросу. В результаті ми отримаємо текст макросу в VBA (Visual Basic for Applications), з якого буде зрозуміло, які методи і з якими параметрами слід викликати, а які значення присвоїти властивостям об’єкта.

Взаємодія з Microsoft Word

Давайте дізнаємося, як використовувати PowerShell для управління Microsoft Word: запустіть програму з оболонки і наберіть рядок тексту у вікні Word. Зробити це нескладно. Спочатку створюємо екземпляр головного об’єкта сервера автоматизації Microsoft Word, який має ідентифікатор програми Word. App1ication, і збережіть посилання на цей об’єкт у змінній $word:

PS С:\> $word = New-Object -ComObject Word.Application

Використовуючи метод Add колекції Docunents, створіть новий документ і збережіть посилання на нього в змінній $doc:

PS С:\> $doc = $word.Documents .Add()

Зробіть вікно з новим документом видимим. Для цього потрібно записати $true у властивість Visib1e об’єкту $word:

PS С:\> $word.Visible = $true

У змінній $se 1 додайте посилання на об’єкт Se1ection, за допомогою якого можна задати тип і розмір шрифту, тип вирівнювання абзацу і tayuke для друку рядків тексту в документі:

PS С:\> $sel = $word.Selection
Встановимо розмір шрифту:
PS С:\> $sel.Font.Size = 14
Встановимо жирний шрифт:
PS С:\> $sei.Font.Bold = $true
Зрештою, друкуємо рядок тексту:
PS С:\> $sel.TypeText("Привіт з PowerShell!")

Сумісність з Microsoft Excel

Давайте створимо нову книгу MicrosoR Excel з PowerShell і виведемо в неї заголовок і один запис телефонної книги. Як і в Microsoft Word, спочатку створюємо екземпляр головного об’єкта Exe1. App1ication і збережіть посилання на цей екземпляр у змінній $XL:

PS С:\> $XL = New-Object -ComObject Excel.Application

В результаті запускається MicrosoR Excel. Щоб зробити вікно програми видимим, встановіть значення властивості Visib1e на $true:

PS С:\> $XL.Visible = $true

Створити нову книгу можна за допомогою методу «Додати» колекції «Книги»; При виконанні цього методу на екран виводиться багато непотрібної технічної інформації, яку ми перенаправимо на порожній пристрій $null:

PS С:\> $XL.WorkBooks.Add() > $null

Тепер можна задати потрібну ширину колонки (властивість C01umnWidth) і вивести текст заголовка:

PS С:\> #Устанавливаем нужную ширину колонок
PS С:\> $XL.Columns.Item(1) .ColumnWidth = 40
PS C: \ > $XL. Columns. Itern (2) . ColumnWidth = 40
PS C:\> $XL.Columns.Item(3) .ColumnWidth = 40
PS C:\> #Печатаем в ячейках текст
PS С:\> $XL.Cells.Item(1,1) .Уа1ие="Фамилия"
PS C:\> $XL.Cells.Item(1,2).Уа1ие="Имя"
PS C:\> $XL.Cells.Item(1,3).Value="Телефон"

За допомогою методу Виділити ( ) виділіть три комірки з введеним заголовком і встановіть для них жирний шрифт:

PS С:\> #Выделяем три ячейки
PS С:\> $XL. Range ("Al: С1"). Select () > $null
PS С:\> #Устанавливаем полужирный шрифт для выделенного диапазона
PS С:\> $XL.Selection.Font.Bold = $true

У другому рядку трудової книжки виводимо дані абонента:

PS С:\> $XL.Cells.Item(2,1).Value="Иванов"
PS C:\> $XL.Cells.Item(2,2) .Уа1ие="Иван"
PS C:\> $XL.Cells.Item(2,3) .Value="555555"

Підсумки

  • Для управління процесами на локальній машині використовують командлети Get-Process, Start-Process, Stop-Process. Доступ До процесів на віддаленій машині можна отримати за допомогою WMI класу win32_Process.

  • Командлети Get-Service, Start-Service, Stop-Service призначені для роботи зі службами на локальному комп’ютері.

  • За допомогою командлета New-оьject з параметром -Comobject можна звертатися до сервісів, що надаються серверами автоматизації.

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.