|
МУ_ЛР_БОС. А. С. Новиковым и обсуждены на заседании кафедры
Лабораторная работа № 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
Практика Практическое применение всего вышесказанного может быть разнообразно.
Например, может быть задача поиска в лог файлах определенного выражения по маске ip-адреса «192.168.100.253″ с последующим копированием найденного в папку D:\TEMP, вариантов множество, вот метод поиска:
$current=Get-Date
$Days="-30"
$start=$current.AddDays($days)
Get-ChildItem D:\Logs -Filter*.log -Recurse|Where-Object{($_.LastWriteTime.Date -ge$Start.Date)-and($_.LastWriteTime.Date -le$End.Date)}|Select-String"192.168.100.253"|Copy-Item-Destination D:\TEMP
Можно придумать сценарий когда на файловой помойке требуется из определенной папки удалять все файлы и папки старше 30 дней.
$Path="C:\temp"
$Days="-30"
$CurrentDate=Get-Date
$OldDate=$CurrentDate.AddDays($Days)
Get-ChildItem$Path|Where-Object{$_.LastWriteTime -lt$OldDate}|Remove-Item
Или если вам требуется удалять все что есть в папке и в подпапках т.е. удаление еще и самих папок.
$Path="C:\temp"
$Days="-30"
$CurrentDate=Get-Date
$OldDate=$CurrentDate.AddDays($Days)
Get-ChildItem$Path-Recuse |Where-Object{$_.LastWriteTime -lt$OldDate}|Remove-Item
Работа с реестром
Доступ к локальному реестру осуществляется с помощью провайдера Registry, который в свою очередь, предоставляет стандартные диски HKCU и HKLM.
Примечание. Провайдер Registry предоставляет доступ ко всему реестру, но по умолчанию дается только два диска.
Для того что бы убедится в этом вводим.
# Простосписокдисков
Get-PSDrive
# Толькоотпровайдера Registry
Get-PSDrive-PSProvider Registry
Раз реестр это «диск» то можно по аналогии доступа к дискам и веткам реестра применять команды Set-Location и Get-Location.
# используем Set-Location
Set-Location HKLM:\SOFTWARE
# а можно и ее синоним команду cd
cd HKLM:\SOFTWARE
# смотрим где мы находимся
Get-Location
# переходим на уровень выше
cd ..
Создание дополнительных дисков При необходимости можно создать дополнительный PSDrive. Для примера можно взять HKEY_CLASSES_ROOT который не является независимым объектом а всего лишь ссылкой на HKEY_LOCAL_MACHINE\SOFTWARE\Classes.Создание нового диска HKCR производится следующим образом.
New-PSDrive-name HKCR -PSProvider registry -root HKLM:\SOFTWARE\ClassesDir HKCR:
Удаление созданного диска производится командой Remove-PSDrive
Remove-PSDrive HKCR
Поиск в реестре Поиск в реестре производится теме же методиками что и в файловой системе. Для примера можно поискать на диске HKLM: все элементы, в которых присутствует ключевое слово *PowerShell*
Get-ChildItem HKLM: -recurse-include*PowerShell*
Примеры Для демонстрации можно вывести список всех сервисов (их настройки храняться в ветке HKLM:\SYSTEM\CurrentControlSet\Services) с помощью двух команд
cd HKLM:\SYSTEM\CurrentControlSet\Services
dir
или при при помощи всего одной команды выводим список установленного ПО.
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*|Format-Table InstallDate, DisplayName, Publisher
Для x64 систем необходимо учитывать вторую ветку т.к. в ней хранятся данные по 32-битным программам.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
Удаленный реестр Для работы с удаленным реестром придется обратиться к .NET.
Вводим команды.
$ServerName="."
$ServerKey=
[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$ServerName)
Получаем объект, свойства которого можно посмотреть использовав стандартный командлет Get-Member
$ServerKey|Get-Member
На экран выводится список свойств, которые нам могут понадобиться.
CreateSubKey – создать ключ
DeleteSubKey – удалить ключ
DeleteSubKeyTree – удалить дерево ключей
DeleteValue – удалить значение
…
Среди методов есть OpenSubkey и GetSubKeyNames с помощью которых можно прочитать значения из реестра удаленной системы.
# задаем имя удаленного хоста
$ComputerName=‘HOST_NAME’
$reg=
[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$ComputerName)
$key=$reg.OpenSubkey("Software\Microsoft\Windows\CurrentVersion\Uninstall",$false)
$key.GetSubKeyNames()
Для придания законченности скрипту надо бы еще и получать значения определенных элементов.
Например, DisplayName и DisplayVersion
$reg=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’,‘HOST_NAME’)
$key=$reg.OpenSubKey(‘SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall’)
$key.GetSubKeyNames()|ForEach-Object{
$subkey=$key.OpenSubKey($_)
$i=@{}
$i.Name =$subkey.GetValue(‘DisplayName’)
$i.Version =$subkey.GetValue(‘DisplayVersion’)
$i.Date =$subkey.GetValue(‘InstallDate’)
$i.Pubisher =$subkey.GetValue(‘Publisher’)
New-Object PSObject -Property$i
$subkey.Close()
}
$key.Close()
$reg.Close()
Правка реестра К сожалению ничего нового не появилось и все используемые методики и способы одинаково применимы как к файловой системе так и к реестру.
# Создаемновыйэлемент
New-Item-Path HKCU:\Environment\NewKey
# илитак
New-Item-type Directory HKCU:\Environment\NewKey-1
# Аналогично будет работать команда md
md HKCU:\Environment\NewKey-2
# переходимв "папку"
Set-Location HKCU:\Environment
# создаемкопиюсозданногоранееключа
Copy-Item-Path HKCU:\Environment\NewKey .\NewKey2
# переименовываем
Rename-Item-Path HKCU:\Environment\NewKey2 -NewName RenameKey2
# удаляемстарый
Remove-Item-Path HKCU:\Environment\NewKey
# Аналогично можно использовать команду del
del HKCU:\Environment\NewKey
Как видите, действия ничем не отличаются от стандартных операций над файлами, главное не заблудится в дисках и структуре реестра.
Последнее что стоит посмотреть это операции с элементами реестра.
# создаемновоезначение
New-ItemProperty-itemType String -Path HKCU:\Environment -name NewKey -Value"NewParam" Допустимые для создания элементы
ItemType
| Description
| DataType
| String
| A string
| REG_SZ
| ExpandString
| A string with environment variables that are resolved when invoked
| REG_EXPAND_SZ
| Binary
| Binary values
| REG_BINARY
| DWord
| Numeric values
| REG_DWORD
| MultiString
| Text of several lines
| REG_MULTI_SZ
| QWord
| 64-bit numeric values
| REG_QWORD
| Остается совсем ничего.
# меняем значение у существующего элемента
Set-ItemProperty-Path .\ -name"NewParam"-Value"UpdatedParam"
# переименовываемпараметр
Rename-ItemProperty-Path .\ -name"NewParam"-NewName"TestParam"
# Удаляемпараметр
Remove-ItemProperty-Path .\ -name newkey 3. Оборудование
Персональный компьютер с установленной операционной системой MSWindows 2000 SP4, XPSP2, Vista или 7. 4. Задание на работу
Используя Windows PowerShell, выполнить последовательность действий, описанных в теоретических положениях данной лабораторной работы:
1. Создать, переименовать, копировать, переместить и удалить файлы и папки на компьютере.
2. Реализовать поиск и фильтрацию найденных файлов по критериям пользователя.
3. Реализовать доступ к реестру: поиск, создание и удаление ключей. 5. Оформление отчета
Отчет должен содержать:
название и цель работы; краткие теоретические сведения о лабораторной работе; описание последовательности действий, совершенных в ходе выполнения лабораторной работы; скриншоты, иллюстрирующие проделанную работу.
6 Контрольные вопросы
6.1. Какие существуют командлеты для работы с файлами и папками?
6.2. Каким образом можно реализовать фильтрацию информации во время выполнения файловых операцияй?
6.3. Каким образом можно создавать и удалять файлы и папки, используя Windows PowerShell?
6.4. Каким образом осуществляется поиск файлов и папок с использованием Windows PowerShell?
6.5. Каким образом осуществляется доступ к реестру с использованием Windows PowerShell?
6.6. Как реализуется правка реестра с использованием Windows PowerShell? 7. Библиографический список
1. Олифер В.Г. Сетевые операционные системы: Учеб. пособие для вузов / В.Г. Олифер, Н.А. Олифер .— М.: Питер, 2003. — 544с.
2. Таненбаум Э. Современные операционные системы / Э. Таненбаум.— 2-е изд. — М.: Питер, 2006 .— 1038с.
3. Монадьеми П. Защита от хакеров в Windows XP/ П. Монадьеми, Б. Мюллер; пер. с нем. под ред. С.Н. Банникова.— М.: БИНОМ, 2005 .— 320с.
4. Немет Э. UNIX: Руководство системного администратора/ Э. Немет, Г. Снайдер, С. Сибасс, Т.Р. Хейн. 3-е изд. — М.: Питер, 2003 .— 925с.
|
|
|