Главная страница
Навигация по странице:

  • 2. Теоретические сведения Работа с файлами и папками В PowerShell есть командлеты Item

  • Include и Exclude

  • Rename-Item . Rename-Item .\File - 01.ps1 .\File - 01.ps1.bak Удаление производится с помощью Remove-Item

  • Работа с реестром

  • Set-Location и Get-Location

  • OpenSubkey и GetSubKeyNames

  • ItemType Description DataType

  • 7. Библиографический список

  • МУ_ЛР_БОС. А. С. Новиковым и обсуждены на заседании кафедры


    Скачать 1.1 Mb.
    НазваниеА. С. Новиковым и обсуждены на заседании кафедры
    Дата15.03.2022
    Размер1.1 Mb.
    Формат файлаdoc
    Имя файлаМУ_ЛР_БОС.doc
    ТипЛабораторная работа
    #396953
    страница16 из 17
    1   ...   9   10   11   12   13   14   15   16   17

    Лабораторная работа № 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с.

    1   ...   9   10   11   12   13   14   15   16   17


    написать администратору сайта