Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_БОС.doc
Скачиваний:
112
Добавлен:
08.05.2019
Размер:
1.15 Mб
Скачать

Лабораторная работа № 14. Windows PowerShell: работа с файлами, папками и реестром

1. Цель работы

Получение практических навыков работы с папками и файлами с использованием инструментария Windows PowerShell. Ознакомление с методами доступа к объектам реестра посредством Windows PowerShell.

2. Теоретические сведения Работа с файлами и папками

В PowerShell есть командлеты Item которые позволяют создавать (New-Item), удалять (Remove-Item), копировать (Copy-Item) и переименовывать (Rename-Item) файлы и папки.

Первым на что следует посмотреть это аналог хорошо знакомой команды dir, это командлет Get-Children.

Примечание: Действие командлета Get-Children его распространяется не только на файловую систему. Но об этом позже.

В консоли PowerShell введите команду dir, нажмите Enter, затем Get-ChildItem D:\Script и снова Enter, посмотрите на результаты. Они одинаковы. Поптому что dir является алиасом к Get-Children.

Вывод – PowerShell унаследовал все старые команды и снабдил нас замечательной справочной системой.

Как дополнительный пример можно привести аналог для dir /S которая рекурсивно выводит список файлов будет команда.

Get-ChildItem -Force D:\Script -Recurse

На замену dir *.exe пришла возможность фильтрации элементов при помощи параметров Path, Filter, Include и Exclude.

Добавилась сложная фильтрация элементов при помощи командлета Where-Object (сокращенное написание Where).

Простой пример фильтрации по расширению.

Get-ChildItem -Path C:\Windows | Where {$_.extension -eq ".dll"}

Дополнение: PowerShell использует в качестве подстановочных знаков не только ? и * как это было в cmd.exe, но и группы символов в квадратных скобках.

Поэтому если вы попробуете найти файл Script[01].ps1 командой

Get-ChildItem ‘.\Script[01].ps1′

То получите ошибку.

В этом случае необходимо использовать параметр -LitealPath

Get-ChildItem -LiteralPath ‘.\Script[01].ps1′

Более сложный вариант выполнит поиск архивов в папке D:\Backup, созданных после 1 мая 2011 года, размер которых находится в диапазоне 10-100 Мб.

Get-ChildItem -Path D:\Backup -Recurse -Include *.zip | Where-Object

-FilterScript {($_.LastWriteTime -gt "2011-05-01") -and ($_.Length

-ge 10mb) -and ($_.Length -le 100mb)}

Опции Include и Exclude работают соответственно своим названиям т.е. первая включает а вторая исключает заданный фильтр из поиска.

$exclude = @(‘*.dll’,‘*.exe’)

$include = @(‘*.txt’,‘*.ps1′)

$result1 = Get-ChildItem "C:\Script" -Recurse -Exclude $exclude

$result2 = Get-ChildItem "D:\Script" -Recurse -Include $include

Перейдем к вопросу копирования файлов.

Аналогом команды copy стал командлет Copy-Item.

Copy-Item -Path D:\Script\script-01.ps1 -Destination E:\Backup\27-09-2011\script-01.ps1

В случае если целевой файл уже существует, при попытке его скопировать вы получите ошибуц и процесс копирования закончится. Для перезаписи целевого файла используется параметр Force:

Copy-Item -Path D:\Script\script-01.ps1 -Destination E:\Backup\27-09-2011\script-01.ps1 -Force

Примечание: Ключ Force работает даже когда целевой файл помечен как файл только для чтения.

Копирование дерева папок выполняется той же командой, но с указанием ключа Recurse.

Copy-Item -Path D:\Script -Recurse E:\Backup\27-09-2011

При необходимости копирования определенных объектов, например только скриптов, PowerShell-а вы можете задать фильтр.

Copy-Item -Filter *.txt -Path D:\Script -Recurse E:\Backup\27-09-2011

Создание файлов и папок средствами PowerShell производится с помощью командлета New-Item.

Для создания папки придется указать тип элемента «Directory», а для создания файла «File»

New-Item -Path ‘D:\Script\New Folder’ -ItemType "directory"

New-Item -Path ‘D:\Script\New Folder\script-02.ps1′ -ItemType "file"

Примечание: Старая команда mkdir, позволяющая создавать папки получила новую жизнь в виде алиаса md.

Переименование элементов производится с помощью команды Rename-Item.

Rename-Item .\File-01.ps1 .\File-01.ps1.bak

Удаление производится с помощью Remove-Item.

Удалить вложенные в папку элементы можно при помощи командлета Remove-Item, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. К примеру, в случае если мы пытаемся удалить папку d:\Backup\20-09-2011, содержащую другие элементы, powershell предложит подтвердить свои действия. Для того что бы этого не происходило:

Remove-Item d:\Backup\20-09-2011 -Recurse