ЛАБОРАТОРНАЯ РАБОТА №12, 13. WindowsPowerShell
Цельэтойработы-научитьсяиспользованиюключевыхвозможностейWindowsPowerShellдлявыполненияразличныхадминистративныхзадач.
Windows PowerShell(PS) - расширяемое средство автоматизации от Microsoft с открытым исходным кодом, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев.Ввод команд Powershellрегистронезависим. Регистр используется для удобства прочтения кода. При анализе же потока вывода – регистр играет роль.
Командлеты (англ. cmdlets) - это специализированные команды PowerShell, которые реализуют различную функциональность. Это встроенные в PowerShell команды. Командлеты именуются по правилу Глагол-Существительное, например, Get-ChildItem, благодаря чему их предназначение понятно из названия. Командлеты выводят результаты в виде объектов или их коллекций. Дополнительно командлеты могут получать входные данные в такой же форме и, соответственно, использоваться как получатели в конвейере. Хотя PowerShell позволяет передавать по конвейеру массивы и другие коллекции, командлеты всегда обрабатывают объекты поочередно.Сохраняется и перенаправление вывода (>).
СценарииPowerShell поддерживает переменные, функции, конструкции ветвления (if-then-else) циклы (while, do, for и foreach), структурированную обработку ошибок и множество других возможностей, включая интеграцию с .NET. Язык не строго типизирован, внутри переменные сохраняются с их типами, которые могут быть базовыми типами (англ. primitivetypes) или объектами. Строки могут быть заключены в одиночные кавычки или в двойные кавычки: при использовании двойных кавычек переменные, содержащиеся в строке, будут заменены их значениями.
ЗапусксредыWindowsPowerShellосуществляетсяследующимобразом:
Пуск(Start)->ВсеПрограммы(AllProgramms) и выбратьэлементWindowsPowerShell.
Другойвариантзапускаоболочки – пункт:
Выполнить...(Run)вменюПуск(Start),ввестиимяфайлаpowershellинажатькнопкуОК.
Для получения справки по командам WindowsPowerShellс примерами необходимо обновить справочную систему. Для этого нужно запустить оболочку PSс правами администратора и выполнить команду Update-Help. Для получения справки с примерами по соответствующему командлету после этого достаточно указать ключ -Examples: напр.: Get-HelpComandlet-Examples. Для вывода подробного описания командлета используется ключ: Get-HelpNew-Item-Full. Если такой возможности нет, можно обратиться к онлайн-справке PS. Для этого достаточно в оболочке PSнабрать следующую команду: Get-HelpUpdate-Help -Online, выбрать соответствующую версию PS(1 на рис.1) и осуществить поиск нужного командлета (2 на рис.1).
Рис. 1
Выполнитекоманду:PSC:>Get-Command
Наэкранбудетвыведенсписоквсехвстроенныхкоманд.
Просмотритесписоквсехсервисов,запущенныхнавашемкомпьютере,исполнивкоманду:PSC:>Get-Service
Просмотритесписоквсехпроцессов,запущенныхвнастоящиймоментнавашемкомпьютере,исполнивкоманду:PSC:>Get-Process
ДляполученияинформациитолькоободномпроцессевкачествеаргументакомандыGet-Processзадаетсяимяэтогопроцесса.Выполнитекоманду:
PSC:>Get-Processexplorer
Для получения информации обовсехзапущенныхпроцессах,начинающихсянасимвол "w": PSC:>Get-Processw*
Поумолчаниюинформациявыводитсяввидетаблицы,нонасамомделевсекомандывозвращаютобъекты.Этиобъектымогутбытьпереданынавходдругимкомандамспомощьюсимвола«|»
При наборе команд вручную предусмотрена возможность автодополнения с помощью TAB. Для этого нужно ввести необходимый минимум символов команды и нажать TAB. Напр., Get- + TABвыдаст Get-Acl. Повторные нажатия TABвыдадут следующие по алфавиту возможные варианты. Чем больше введено символов команды, тем точнее автодополнение.
Некоторые команды по умолчанию имеют короткие алиасы. Напр., ps = Get-Process. Полный список алиасов можно получить, набрав alias, конкретный алиас: aliasps. Для поиска строки, содержащей нужное слово или часть можно использовать конвеер: alias | findstr "Item".
Выполнитекоманду:PSC:>Get-Processi*|format-list
Объектыбудутотформатированыввидесписка.Теперьсписокпроцессовдоступенвдругомпредставлении.Для получения подробной информации о различных форматах можно использовать следующую команду:PSC:>Helpformat*
Другие возможные форматы:PSC:>Get-Processi*|format-wide
иPSC:>Get-Processi*|format-custom
Выполняя команды, мы всегда получаем объекты, а у объектов есть свойства. Просмотрите все свойства объекта, полученного при выполнении командыGet-Processиспользуяследующуюкоманду:PSC:>Get-Process|Get-Member
Посколькунавыходевсегдаполучаетсяобъект,можноманипулироватьимдлявыполнениядополнительныхопераций.Выполнитеоперациюфильтрации,исполнивкоманду:PSC:>Get-Process|where{$_.handlecount-gt400}
Выполнитеоперациюсортировки,исполнивкоманду:
PSC:>Get-Process|where{$_.handlecount-gt400}|sort-objectHandles
ВыполнимкомандуGet-Process|Get-MemberCompany–приформатированиипоумолчаниюневозможнополучитьжелаемыеданные.Преобразуемполученнуюкомандув:
PSC:>Get-Process|Get-MemberCompany|Format-List
PSC:>Get-Process|sort-objectCompany|format-table-GroupCompanyname,description,handles.
СортировкаобъектовпосвойствуWS(workingset)ивыбор5процессов,занимающихбольшевсегопамяти:
PSC:>Get-Process|sort-object-propertyWS–descending|select-object-first5
Завершение процесса. Командаstop-processпозволяетостановитьзапущенныйпроцесс.ЗапуститеNotepadнавиртуальноймашине.Выполнитекоманду:
PSС:>Get-Processnotepad|Stop-Process
ОкноБлокнотазакроется.СновазапуститеNotepad.Такаявозможностьневсегдаявляетсябезопасной,поэтомулучшеиспользоватьподобныекомандысопцией-whatif,котораяпоказывает,чтопроизойдетпривыполнениитойилиинойкоманды,нонасамомделекоманданевыполняется:
PSC:>Get-Processnotepad|Stop-Process–whatifКрометого,можноуказыватьнанеобходимостьподтвержденияпередвыполнениемкоманды:
PSC:>Get-Processnotepad|Stop-Process–confirm
Впоследнемслучаемыполучаемописаниедействий,которыевыполняеткоманда,иможемвыбрать,подтверждатьеевыполнениеилинет.
Запустим "Блокнот": PS C:\>notepad и найдем этот процесPS C:\>psnotepad. Получим список методов, используемых этим процессом: PS C:\>psnotepad | Get-Member. Для применения к выбранному процессу одного из перечисленных методовили получения свойств используем следующую конструкцию (напр. принудительно завершить процесс):PS C:\> (psnotepad).Kill(). Таким образом, применяя выбранные методы к процессу можно получить подробнейшую информацию о нем, также управлять им.
Узнать какой файл запустил тот или иной процесс можно с помощью команды: PS C:\>psnotepad| ls
ПакетныефайлыPowershellпредставляютсобойфайлысрасширением*.psl,вкоторыепомещаютсякомандыPowerShell.Длясоблюдениябезопасностипакетныефайлыдолжныбытьподписаны.ДлязащитыпользовательскихданныхицелостностиоперационнойсистемывоболочкеWindowsPowerShellреализованынекоторыесредстваобеспечениябезопасности,втомчислеполитикавыполнения.Политикавыполненияопределяет,можноливыполнятьсценарии,и,еслида,должнылионибытьподписаныцифровойподписью.Крометого,онаопределяет,можнолизагружатьконфигурационныефайлы.
Преждевсего,посмотритетекущийстатусполитикивыполненияспомощьюкоманды:PSC:>get-executionpolicy
ВслучаеустановкипоумолчаниювыдолжныполучитьстатусRestricted.Длятогочтобысменитьэтотстатус,воспользуйтеськомандой:
PSC:>set-executionpolicy<статус_политики>
Возможны следующие политикивыполнения скриптов:
Restricted-этаполитикавыполненияпоумолчанию.Допускаетотдельныекоманды,носценариивыполнятьнельзя.
AllSigned-здесьвыполнениесценариевразрешено,нонеобходимоналичиецифровойподписинадежногоиздателянавсехсценарияхифайлахконфигураций,включаясценарии,написанныеналокальномкомпьютере.Такжепритакойполитикезапрашиваютподтверждениепередвыполнениемсценариевнадежныхиздателей.Однакоприэтомсуществуетопасностьтого,чтоподписанные,новредоносныесценариивыполняются.
RemoteSigned-притакомстатусеполитикивыполнениесценариевтакжеразрешено.Необходимоналичиецифровойподписинадежногоиздателянавсехсценарияхифайлахконфигураций,загруженныхизИнтернета(включаяэлектроннуюпочтуипрограммымгновенногообменасообщениями).Нетнеобходимостивцифровыхподписяхнасценариях,запускаемыхслокальногокомпьютера.Незапрашиваютподтвержденияпередвыполнениемсценариевнадежныхиздателей.Подписанные,новредоносныесценариитакжевыполняются.
Unrestricted-самаядемократичнаяполитика,позволяетзапускатьнеподписанныесценарии.Сценарииифайлыконфигурации,загруженныеизИнтернета(включаяMicrosoftOutlook,OutlookExpressиWindowsMessenger),выполняютсяпослепредупреждения,чтоданныйфайлбылзагруженизИнтернета.Притакомстатусетакжевозможновыполнениевредоносныхсценариев.Использованиеданногостатусаполитикивыполнениярекомендуетсятольконатестовыхмашинах,таккаквреальныхсетяхэтокрайненебезопасно.
ВзависимостиотспецификивыполняемыхсерверамизадачрекомендуетсяиспользоватьRemoteSigned,вслучаях,когдавыполняютсяпреимущественносценариисобственногонаписания,иAllSigned,когдавыполняютсясценарии,полученныеизвнешнихисточников.ДлянашегоупражненияустанавливаемстатусполитикиUnrestrictedлибоRemoteSigned:
PSC:>Set-ExecutionPolicyUnrestricted
нопослеокончаниятестированиянезабудьтесновавключитьданнуюопциюспомощьюследующейкоманды:
PSC:>Set-ExecutionPolicyAllSigned
ДлязапускаскриптовpslдостаточнопростонабратьвкоманднойстрокеPowerShellимяфайла.
РазберемосновныекомандыWindowsPowerShell,применяемыедляманипуляцийсфайловойсистемой:new-item,copy-item,move-item,rename-itemиremove-item.
СоздадимновыйподкаталогTextFilesвтекущемкаталоге:
PSC:>new-itemTextFiles-itemtypedirectory
Еслиопуститьпараметр-itemtype,тоWindowsPowerShellспросит,чтомысоздаем-файл(file)иликаталог(directory).Отметим,чтоукомандыNew-Itemестьалиас-ni.Всокращенномвиденашаперваякомандабудетвыглядетьтак:
PSC:>niTextFiles-itemtypedirectory
Создайтенескольконовыхфайловвтекущемкаталогеdemo1.txt,demo2.txt,demo3.txt.
Скопируйте всефайлысрасширением*.txtвподкаталогTextFiles,используякомандуCopy-Item(алиасы-cpi,cp,сору). Еслиприменятьданнуюкомандувпакетномфайле,имеетсмыслсделатьееболеепонятной,указавпараметры-path(источник)и-destination(приемник):
PSC:>Copy-Item-path'.\*.txt'-destination'.\TextFiles'
Послевыполнениякомандыкопированиямыиспользуемкомандуset-locationдляпереходавподкаталогTextFiles:
PSC:>Set-LocationTextFiles
Спомощьюкомандыrename-itemпереименовываемфайлdemo1.txtвdemo1.bak.Принеобходимостиможноприменятьопции-pathи-newName:
PSC:>Rename-Itemdemo1.txtdemo1.bak
Послетогокакфайлпереименован,переносимегонаодинуровеньвверх,используякомандуmove-item:
PSC:>Move-Itempsdemo.bak..\
Затемприменяемкомандуset-location,аточнее-ееалиасslдляпереходавдругойкаталог:
PSC:>sl..
МанипуляциисфайловойсистемоймызавершаемудалениемвсегокаталогаTextFiles,используякомандуremove-item.ПосколькувкаталогеTextFilesсодержатсяфайлы,применяетсяопция-recurse.Еслиэтаопциянеуказана,WindowsPowerShellзапроситподтверждениепередвыполнениемкомандыremove-item.
PSC:>Remove-ItemTextFiles –recurse
Для вывода содержимого файлов с расширением BAKв текущей директории: ls -filter "*.bat" | Get-Content
Задания
С помощью окружения PowerShellсоздайте произвольную папку. Перейдите в новую папку. Создайте в ней файлOUT1.txt, содержащий информацию обо всех запущенных на компьютере процессах (вывод команды ps).
PS C:> ni ПАПКА -itemtype directory
PS C:>slПАПКА
PS C:>ps> OUT1.txt
С помощью окружения PowerShellзапустите процесс Wordpad. С помощью методов этого процесса получите следующую информациюSessionId, номер процесса (Handle), используемые системные библиотеки (Modules). Выведите эту информацию в файл OUT2.txt предварив каждый вывод заголовком (название соответствующего свойства).
PS D:\66\44> echo "SessionIDI" >.\OUT2.txt