Командлети PowerShell для виведення даних.
Зазвичай в процесі роботи PowerShell генеруються деякі вихідні дані. Для виведення цих даних існують спеціальні Out-командлети (командлети, назва яких починається з Out-). Коли виконується команда PowerShell повертає дані, вони передаються по конвеєру на вхід Out-командлет, який обробляє їх і відправляє в пристрій виведення (на екран, у файл, на принтер і т.п.).
Для перегляду цих командлетів виконаємо команду:
Get-Command -Verb Out
Out-Host
командлети Out-Host служить для виведення даних на екран. Наприклад:
Get-Process powershell | Out-Host
Втім, додавати Out-Host в кінець команди зовсім необов'язково. В кінці конвеєра за замовчуванням знаходиться командлет Out-Default, який і перенаправляє всі в Out-Host.Тобто попередня команда еквівалентна команді:
Get-Process powershell | Out-Default
яка в свою чергу еквівалентна команді:
Get-Process powershell
Насправді механізм виведення ще заплутаніше. Як ви пам'ятаєте, результатом роботи PowerShell є об'єкти. Out-командлети не вміють працювати з будь-якими об'єктами, а тільки зі спеціальним типом об'єктів форматування, тому при отриманні об'єкта викликають один з командлетів форматування (Format- *).Format-командлет надає Out-Командлети об'єкти форматування, що описують порядок побудови вихідних даних, а Out-командлет відправляє їх в потрібний пристрій. Тобто при виконанні команди:
Get-Process powershell
насправді відпрацьовує команда:
Get-Process powershell | Format-Table | Out-Host
Хоча додавати Out-Host в кінець команди необов'язково, але в деяких випадках зручно .Наприклад він має ключ Paging, за допомогою якого можна організувати посторінковий висновок:
Get-Process | Out-Host -Paging
Out-File
Командлети Out-File перенаправляє вихідні дані в зазначений файл , наприклад:
Get-Process powershell | Out-File proc.txt
За замовчуванням дані в файлі перезаписувати.Заборонити перезапис існуючого файлу можна, вказавши ключ NoClobber, а якщо необхідно дописувати дані в існуючий файл, то можна використовувати ключ Append, який додає дані в кінець файлу:
Get-Process powershell | Out-File proc.txt -Append
Для виведення в файл можна використовувати скорочений синтаксис.Наприклад для запису:
Get-Process powershell> proc.txt
або для додавання в кінець файлу:
Get-Process powershell >> proc.txt
Out-GridView
командлети Out-GridView виводить дані у вигляді графічної таблиці, в якій їх можна відфільтрувати і відсортувати за потрібною ознакою. Для наочності можна вказати ключ Title, який буде відображатися в заголовку:
Get-Process | Out-GridView -Title processes
Починаючи стрет версії PowerShell Out-GridView підтримує ключ PassThru, що дозволяє передати отримані дані далі по конвеєру.Наприклад, можна вивести список процесів, в графічній оснащенні відібрати потрібні і передати їх Командлети Stop-Process, який зупинить обрані процеси:
Get-Process | Out-GridView -PassThru | Stop-Process
Out-Null
Командлети Out-Null використовується в тому випадку, якщо вихідні дані відображати не потрібно.Він відправляє отримані дані в пристрій NULL, тобто видаляє їх. Для прикладу візьмемо таку команду:
$ process = Get-WmiObject win32_process -Filter "Name = 'Notepad.exe'"
$ process.Terminate ()
Крім основного дії (зупинка процесу) вона виводить багато зайвої інформації. Щоб позбавиться від неї, відправимо висновок в Out-Null, наприклад так:
$ process.Terminate () | Out-Null
або так:
$ process.Terminate ()> $ null
Out-String
командлети Out-String перетворює вхідні дані в масив рядків. По суті Out-String перетворює об'єкти PowerShell в рядки, з якими далі можна працювати як зі звичайним текстом (форматувати, проводити пошук і т.п.).
Для прикладу виведемо процес, збережемо його в змінну $ a і подивимося тип даних:
$ a = Get-Process powershell
$ a.GetType ()
Потім згодуємо вміст Out-String а висновок збережемо в змінну $ b:
$ b = $ a | Out-String
$ b.Get-Type ()
Як видно з прикладу, на вході Out-String тип даних Process, а на виході String.
Out-String принципово відрізняється від інших out-командлетів. Оскільки звичайні out-командлети працюють з кінцевим результатом попередніх команд, то самі вони не проводять ніяких вихідних даних.Саме тому out-командлет зазвичай ставиться останнім в командному рядку, адже після нього в конвеєрі не залишається нічого, з чим можуть працювати інші командлети.
На відміну від них Out-String приймає об'єкти, перетворює їх в масив рядків і передає далі по конвеєру. За замовчуванням дані накопичуються і повертаються одним рядком, але за допомогою ключа Stream можна вказати висновок по окремому рядку для кожного об'єкта.
Для прикладу виведемо список системних служб з усіма властивостями і відформатуємо його у вигляді таблиці:
Get-Service | Format-Table -Property * -AutoSize
Оскільки ширина консолі межує 80 символами, то більшість даних буде обрізано, що не дуже здорово.
Щоб не обрізати висновок, направимо його в Out-String і збільшимо ширину:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024
Тепер всі дані потрапили на екран, але все одно виглядає не дуже.
Исправим положення, передавши висновок Out-String Командлети Out-File:
Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File service.txt
На виході отримуємо файл з таблицею потрібної ширини, а для перегляду є смуга прокрутки. Таким чином можна створювати і переглядати таблиці практично будь-якої ширини.
Out-Printer
Командлети Out-Printer перенаправляє висновок на принтер. Наприклад:
Get-Service | Format-Table -Property * -AutoSize | Out-File service.txt -Width +1024
Get-Content service.txt | Out-Printer
Висновок відправляється на принтер, заданий в системі за замовчуванням. Для вказівки альтернативного принтера можна використовувати ключ Name.П>.