Робота з файлами за допомогою команд powershell, windows it pro

ARUBA INSTANT WI-FI: ПРОСТІ, ПОТУЖНІ, ДОСТУПНІ

Windows PowerShell надає користувачам чотири способи роботи з файлами.

У даній статті я розповім про командах, які були створені спеціально для файлів. Ось ті команди, які ви можете використовувати для роботи з файлами:

Використання Get-ChildItem

Команда Get-ChildItem повертає елементи, виявлені в одному або декількох зазначених місцях. Місцезнаходження може бути контейнером файлової системи, таким як каталог, або місцем, показаним іншим провайдером, таким як підрозділ реєстру або сховище сертифікатів. Ви можете задіяти параметр Recurse даної команди, щоб дістатися до елементів у всіх підпапках.

Якщо використовувати цю команду без параметрів, вона повертає всі дочірні елементи (такі як папки і файли) в поточному місцезнаходження. Наприклад, якщо поточне місце розташування - кореневої каталог H, то запускаючи команду Get-ChildItem, ви отримаєте результати, схожі на ті, що показані на екрані 1.

Робота з файлами за допомогою команд powershell, windows it pro

Екран 1. Результати роботи Get-ChildItem

Використовуючи параметри, ви можете отримати інформацію, яка вам потрібна. Наприклад, наступна команда повертає всі файли. log в кореневому каталозі C, включаючи підкаталоги:

Як ми бачимо, ця команда використовує параметри -Include, -Recurse і -Force. Параметр -Include служить для повернення заданих елементів. Він підтримує використання групових символів і є ідеальним для вказівки розширення імені файлу. Параметр -Recurse дає PowerShell вказівку повертати подпапки поряд з файлами. Параметр -Force додає приховані і системні файли до вихідних даних.

Після запуску цієї команди ви, ймовірно, отримаєте великий список повідомлень про помилки доступу. Залежно від налаштувань і політик безпеки системи, доступ до деяких каталогах (наприклад, Recycle Bin, Start Menu, папки користувача) обмежений і їх не можна прочитати. Ви можете приховати ці повідомлення про помилки, вказавши параметр -ErrorAction SilentlyContinue.

Наступна команда дає ті ж результати, що і попередня, тому що параметр -Path розуміє групові символи:

Для деяких параметрів команд PowerShell ім'я параметра ви можете опустити, якщо знаєте, що параметр знаходиться в тій позиції, яка потрібна PowerShell. Так відбувається при використанні параметра -Path команди Get-ChildItem. Таким чином, наступна команда видасть той же результат, що і попередня команда:

Параметр -Path може приймати множинні аргументи, розділені комами. Наприклад, припустимо, що ви хочете повернути. log-файли з двох місць: кореневого каталогу С і кореневого каталогу Н, останній є поточним (тобто розташування за замовчуванням). Для виконання цієї дії потрібно вказати значення C: \ * для отримання всіх файлів журналів з кореневого каталогу С і значення * для отримання всіх файлів журналів з кореневого каталогу Н (оскільки коренева папка Н є місцем розташування за замовчуванням, вам не потрібно вказувати H: \. ). Необхідно розділити два аргументи коми, наприклад так:

У результатах прикладу на екрані 2 зверніть увагу на атрибут «h" в колонці Mode кореневого каталогу Н. Цей атрибут показує, що файл ntuser.dat.LOG є прихованим. Це виявляється за допомогою параметра -Force.

Робота з файлами за допомогою команд powershell, windows it pro

Екран 2. Висновок прихованих файлів

Хоча в прикладах це і не показано, ви можете звернутися до Get-ChildItem за допомогою додаткових імен, псевдонімів. Ось три вбудованих псевдоніма: dir (як в DOS команда dir), gci і ls (як команда ls в UNIX).

Використання команди Get-Item

Команда Get-Item повертає задані елементи з призначених місць розташування. Як і ChildItem, Get-Item може застосовуватися для навігації по різним типам сховищ даних. На відміну від Get-ChildItem, Get-Item не має місця розташування за замовчуванням, тому ви повинні завжди надавати, як мінімум, одне місце розташування за допомогою параметра -Path. Хоча сам параметр і потрібен, вказувати ім'я параметра не потрібно. Наприклад, ось проста команда, яка використовує «точку» для повернення інформації про поточний каталозі (в даному випадку коренева папка Н):

Результати показані на екрані 3. Команда Get-Item дозволяє задіяти груповий символ * для повернення всього вмісту елемента (тобто всіх дочірніх елементів). Наприклад, наступна команда повертає весь контент поточного каталогу (в даному випадку кореневого каталогу Н). Точка і символ зірочки можуть бути використані як компоненти в шляху файлу, але ви повинні ще вказати косу риску як роздільник папок:

Робота з файлами за допомогою команд powershell, windows it pro

Екран 3. Використання Get-Item для виведення інформації про поточну папці

Результати ви можете побачити на екрані 4. Важливо розуміти, що команди PowerShell, включаючи Get-Item, повертають об'єкти. Команда Get-Item повертає об'єкти System.IO.DirectoryInfo, які містять кілька методів і властивостей, які ви можете використовувати. Щоб побачити ці методи і властивості, можна передати результати команди Get-Item в команду Get-Member. Якщо ви хочете побачити ці властивості, можете запустити таку команду:

Робота з файлами за допомогою команд powershell, windows it pro

Екран 4. Використання Get-Item для виведення всього вмісту поточної папки

Як показано на екрані 5, властивість LastAccessTime повертає дату і час, коли до зазначеного каталогу був в останній раз здійснений доступ.

Робота з файлами за допомогою команд powershell, windows it pro

Екран 5. Вивчення властивостей об'єкта System.IO.DirectoryInfo

Наприклад, якщо ви хочете з'ясувати, коли до поточного каталогу було здійснено доступ в останній раз, ви запускаєте команду:

Зауважимо, що в цій команді виклик Get-Item. укладений в круглі дужки і що між закриває круглою дужкою і LastAccessTime стоїть крапка. Круглі дужки навколо виклику «Get-Item. »Потрібні для того, щоб повернуті об'єкти зберігалися в пам'яті і ви могли б виконувати з ними додаткові операції. В цьому випадку операцією є пошук значення, що повертається властивості LastAccessTime об'єкта. У PowerShell ви використовуєте символ точки для отримання доступу до ряду властивостей об'єкта і методів. Ось чому слід вставити точку між закривається дужкою і LastAccessTime.

Існує колекція спеціальних властивостей, яка називається NoteProperty. Ви можете застосовувати її для того, щоб звузити виведені результати для певного типу об'єкта. Ви можете використовувати Get-Member з параметром -MemberType NoteProperty, щоб дізнатися про спеціальні властивості цієї колекції:

Якщо ви запустите цю команду, то виявите, що колекція повертає шість властивостей: PSChildName, PSDrive, PSIsContainer, PSParentPath, PSPath і PSProvider. Властивість PSIsContainer колекції NoteProperty показує, чи є об'єкт контейнером (папкою). Властивість повертає True, коли об'єкт є папкою, і False, коли він є файлом. Ви можете використовувати цю властивість для обмеження виведення Get-Item папками:

Давайте обговоримо цю команду докладніше. Її результати показані на екрані 6. Ви передаєте по конвеєру весь контент кореневого каталогу З команді Where-Object, яка дозволяє відфільтрувати об'єкти. В цьому випадку ви використовуєте PSIsContainer з NoteProperty для фільтрації вихідних даних, і, таким чином, повертаються тільки каталоги. Автоматична змінна $ _ представляє кожен файловий об'єкт, як тільки він передається команді по конвеєру.

Робота з файлами за допомогою команд powershell, windows it pro

Екран 6. Обмеження виведення команди Get-Item тільки папками

Як і у випадку з Get-ChildItem, ви можете звертатися до Get-Item по додатковому імені. У Get-Item є одне вбудоване додаткове ім'я: gi.

Параметр -Path приймає групові символи, тому ви можете копіювати декілька файлів відразу. Наприклад, наступна команда копіює всі файли в папці C: \ Scripts в папку C: \ Backups \ Scripts:

Щоб отримати більш детальне управління операцією копіювання, ви можете задіяти параметри -Recurse, -Filter і -Force. Так, наступна команда копіює всі файли. txt, що містяться в C: \ Scripts в C: \ Temp \ Text:

Зверніть увагу, що «зворотна лапки» в кінці першого рядка є символом продовження рядка в PowerShell.

Трохи освоївшись, ви можете вставити властивість FullName в параметр -Path для копіювання ретельно відібраного списку файлових об'єктів, використовуючи або Get-Item, або команду Get-ChildItem:

Використання Move-Item

Move-Item більш обережна в цьому сенсі і замість видалення видає помилку. Наприклад, якщо ви запускаєте команду

то отримаєте помилку Can not create a file ( «не можна створити файл»), так як файл вже існує. Використання параметра -Force призводить до того, що Move-Item переписує існуючий файл.

Крім параметра -Force, ви можете задіяти параметри Recurse і -Filter в команді Move-Item, щоб налаштовувати її. Наприклад, наступна команда переміщує текстові файли в папці C: \ Scripts і її підпапках в папку C: \ Temp \ Text. В даному випадку вам потрібно вказати ім'я параметра -Destination, оскільки ви не використовуєте цей параметр в тій позиції, де його чекає PowerShell:

Використання New-Item

New-Item грає подвійну роль - творця каталогу і файлу (крім того, вона може створювати розділи і параметри реєстру). Коли ви хочете створити файл, вам потрібно вказати параметри -Path і -ItemType. Як було показано вище, параметр -Path є позиційним, таким чином, не потрібно ім'я параметра -Path, коли ви задаєте шлях і ім'я (тобто шлях до файлу) відразу ж після імені команди. Також слід вказати параметр -ItemType за допомогою прапорця »file«. Ось приклад:

Параметр -Path може приймати масив рядків так, що ви можете створювати декілька файлів за раз. Вам просто потрібно розділити шляхи за допомогою ком. До того ж, необхідно вставити спочатку параметр -ItemType »file«, який означає, що вам потрібно вказати ім'я параметра -Path, оскільки він тепер не перший параметр після імені команди:

Якщо файл з точно таким же ім'ям шляху файлу вже існує, ви отримаєте помилку. Однак ви можете вказати параметр -Force так, що New-Item перепише існуючий файл.

Що насправді примітно, так це те, що New-Item дозволяє вставляти текст у файл за допомогою параметра -Value:

Не забудьте вказати параметр -Force, якщо файл вже існує. Інакше система видасть помилку.

Параметр -Value може приймати введення даних по конвеєру, що є відмінним способом перенаправляти висновок даних інших команд в файл. Вам потрібно просто конвертувати вихідні об'єкти в рядок, використовуючи Out-String (якщо ви цього не зробите, New-Item створить новий файл для кожного об'єкта). Наприклад, наступна команда повертає інформацію про всі файли з кореневого каталогу С, конвертує інформацію про файлах в рядок, а потім пише цю інформацію в файл H: \ C Listing.txt:

New-Item має тільки одне вбудоване додаткове ім'я: ni.

Використання Remove-Item

Remove-Item назавжди видаляє ресурс з зазначеного диска, тобто вона не переносить його в кошик. Таким чином, якщо ви використовуєте Remove-Item для видалення файлу, то немає іншого способу повернути його, крім як через програму відновлення файлів.

Ви вказуєте, який файл має видаляти Remove-Item за допомогою параметра -Path. Він позиційний, тому вам не потрібно вказувати ім'я параметра -Path, якщо воно йде відразу ж за ім'ям команди. Наприклад, ось команда для видалення файлу test.txt, який був раніше скопійований в папку C: \ Backups \ Scripts:

Давайте розглянемо ще один приклад. Наступна команда видаляє всі файли. txt (що зазначено в параметрі -Include) в папці C: \ Scripts, крім тих файлів, які мають слово test де-небудь в файловому імені (що зазначено в параметрі -Exclude):

Будучи, по суті, небезпечним інструментом, Remove-Item надається з парою елементів захисту. Перш за все, якщо ви намагаєтеся видалити всі з папки, яка містить непусті подпапки, ви отримаєте запит на підтвердження Confirm. Наприклад, припустимо, що C: \ Scripts містить непусті подпапки і ви запускаєте таку команду:

Потрібно підтвердити, що ви хочете видалити непусті подпапки, як показано на екрані 7.

Екран 7. Запит на підтвердження видалення при використанні Remove-Item

Якщо ви хочете запустити сценарій, який використовує Remove-Itemм для видалення всього вмісту папок, включаючи вміст підпапок, вам потрібен спосіб запускати Remove-Item без участі користувача. Цей спосіб - включення прапорця -Recurse.

Другий елемент захисту - це параметр -WhatIf. Якщо ви включаєте його в команду Remove-Item, то PowerShell покаже, які елементи будуть видалені, замість того, щоб просто видалити їх. В силу деструктивної природи операцій видалення, має сенс виконувати пробне застосування команди Remove-Item з параметром -WhatIf, як тут:

Результати прикладу показані на екрані 8. Зауважте, що результати можуть включати в рядок повідомлення про помилку Can not remove the item at 'C: \ Users' because it is in use. Така ситуація виникає, якщо поточна робоча папка є підпапка каталогу, яку ви намагаєтеся видалити (в прикладі - підпапка кореневого каталогу С).

Робота з файлами за допомогою команд powershell, windows it pro

Екран 8. Застосування Remove-Item з параметром -WhatIf Parameter

Що стосується додаткових імен, то Remove-Item стоїть осібно. У нього шість псевдонімів: del, erase, rd, ri, rm і rmdir.

Використання Rename-Item

Команда Rename-Item використовується, коли ви хочете перейменувати ресурс всередині простору імен, наданого провайдером PowerShell. Перший параметр Rename-Item - це -Path, а другий параметр -NewName. Параметр -NewName, як і слід було очікувати, задає нове ім'я ресурсу. Якщо Rename-Item виявляє не тільки ім'я, але і шлях, він видасть помилку. Наприклад, якщо ви хочете змінити ім'я файлу C Listing.txt з кореневого каталогу Н на ім'я c_listing.txt, вам буде потрібно запустити таку команду:

Оскільки -Path і -NewName є позиційними параметрами, ви можете пропускати імена параметрів до тих пір, поки вони знаходяться в очікуваних позиціях:

У Rename-Item є одне обмеження - параметр -NewName очікує одного рядка без групових символів. Однак ви можете обійти цю вимогу, перераховуючи елементи в каталозі. Вам потрібно просто направити по конвеєру вихідні дані команді Get-ChildItem в параметр -Path і вказати параметр -NewName.

Наприклад, наступна команда перераховує всі файли в поточному каталозі і перейменовує кожен файл, замінюючи всі прогалини в файлових іменах на підкреслення:

Давайте подивимося, як працює ця команда. Вихідні дані Get-ChildItem потрапляють в Where-Object, яка фільтрує вихідні дані так, що повертаються тільки файли. Це досягається шляхом використання PSIsContainer з NoteProperty з логічним оператором -not (!) (В якості альтернативи ви могли б взяти $ _. PSIsContainer -eq $ false, як це було зроблено в попередньому прикладі). Відфільтровані вихідні дані (файлові об'єкти) потрапляють в Rename-Item. Значення параметра -NewName в Rename-Item є блоком сценарію. Цей блок буде виконаний перед командою Rename-Item. У блоці сценарію автоматична змінна $ _ представляє кожен файловий об'єкт, так як він потрапляє в команду через контейнер. Оператор порівняння -replace замінює прогалини в кожному імені файлу ( '') на символ підкреслення ( '_'). Зауважте, що ви можете використовувати вираз '\ s' для вказівки пробілу, оскільки перший параметр приймає регулярні вирази. Навіть приховані файли можуть бути перейменовані завдяки параметру -Force.

Rename-Item має два псевдоніма: ren і rni.

чудова сімка

Поділіться матеріалом з колегами і друзями

Схожі статті