Администрирование на PowerShell

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    512,43 Кб
  • Опубликовано:
    2013-07-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Администрирование на PowerShell

Министерство образования Республики Беларусь

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Международный институт дистанционного образования

Кафедра «Системы автоматизированного проектирования»









КУРСОВАЯ РАБОТА

по дисциплине «Основы информационных технологий»

на тему: «Администрирование на PowerShell»

ВВЕДЕНИЕ

PowerShell - расширяемое средство автоматизации от Microsoft, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев. Впервые публично язык был продемонстрирован на PDC (Professional Developers Conference) в сентябре 2003 г. под кодовым названием «Monad». Версия 1.0 выпущена в 2006 году и сейчас доступна для Windows XP SP2/SP3, Windows Server 2003, Windows Vista, и встроена в Windows Server 2008 как опциональный компонент.Windows PowerShell 2.0 был выпущен в составе Windows 7 и Windows Server 2008 R2 как неотъемлемый компонент системы. Кроме того, вторая версия доступна и для других систем, таких как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1 и Windows Server 2008.Windows PowerShell построен на базе Microsoft .NET Framework и интегрирован с ним. Дополнительно PowerShell предоставляет удобный доступ к COM, WMI и ADSI, равно как и позволяет выполнять обычные утилиты командной строки, чтобы создать единое окружение, в котором администраторы смогли бы выполнять различные задачи на локальных и удалённых системах.

Эти административные задачи обычно выполняются с помощью командлетов (в оригинале «cmdlets», произносится как «commandlets»), которые являются специализированными классами .Net. Пользователь может комбинировать их в скриптах (сценариях), используя различные конструкции, утилиты командной строки и обращения к обычным классам .NET (или WMI/COM объектам). Кроме того, можно использовать различные хранилища данных, такие как файловая система или реестр, которые предоставляются PowerShell’у посредством «поставщиков» (в оригинале providers).Windows PowerShell также предоставляет механизм встраивания, благодаря которому исполняемые компоненты PowerShell могут быть встроены в другие приложения. Эти приложения затем могут использовать функциональность PowerShell для реализации различных операций, включая предоставляемые через графический интерфейс. Этот подход применен в Microsoft Exchange Server 2007 для реализации управляющей функциональности в виде командлетов PowerShell и графических утилит управления в виде оболочек PowerShell, которые вызывают необходимые командлеты. Таким образом, графический интерфейс управления находится поверх промежуточного слоя - PowerShell. Другие приложения Microsoft, включая Microsoft SQL Server 2008, System Center Operations Manager и System Center Data Protection Manager также предоставляют доступ к своим интерфейсам управления через командлеты PowerShell.

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

Наиболее распространенным средством «экономии времени и избавления от головной боли» стала запись и последовательное пакетное исполнение необходимых операций - исполнение сценариев или скриптов в интерпретаторе команд операционной системы. Попытки улучшить состояние дел в области управления и администрирования Windows с помощью командного интерфейса привели не к адаптации чужеродного для системы языка сценариев или созданию супер-утилиты, работающей в DOS, а к появлению PowerShell - новой командной оболочки.

В своей курсовой работе я хотел рассмотреть несколько проблемных моментов, связанных с администрированием локальных сетей и в частности машин клиентов.

. Рассмотрим ситуацию, когда нужно удалённо посмотреть список установленных недавно программ на клиентской машине. При помощи языка Power Shell попробуем написать скрипт, который создавал бы список установленного программного обеспечения на пользовательской машине, и сортировал их по дате установки.

. Напишем скрипт, который бы сканировал заданный диапазон ip адресов и выводил отчёт обо всех компьютеров в сети. Это очень удобно, когда надо проследить присутствие той или иной машины в сети.

1. КРАТКИЙ ОБЗОР POWERSHELL

Команды, исполняемые в Windows PowerShell, могут быть в форме командлетов, которые являются специализированными классами .NET, созданными с целью предоставления функциональности в PowerShell в виде сценариев PowerShell (*.ps1) или являться обычными исполняемыми файлами. Если команда является исполняемым файлом, то PowerShell запускает её в отдельном процессе; если это командлет, то он исполняется внутри процесса PowerShell. PowerShell предоставляет интерфейс командной строки, в котором можно вводить команды и отображать выводимые ими данные в текстовом виде. Этот пользовательский интерфейс, базирущийся на стандартном механизме консоли Windows, предоставляет настраиваемый механизм автозавершения команд, но не обладает возможностью подсветки синтаксиса (хотя при желании её можно обеспечить). В PowerShell также можно создавать псевдонимы (alias) для командлетов, которые при вызове преобразуются в оригинальные команды. Кроме того, поддерживаются позиционные и именованные параметры для командлетов. При выполнении командлета работа по привязке значений аргументов к параметрам выполняется самим PowerShell, но при вызове внешних исполняемых файлов аргументы передаются им для самостоятельного разбора.

Другое понятие, используемое в PowerShell, - это «конвейер» (pipeline). Подобно конвейерам в Unix, они предназначены для объединения нескольких команд путём передачи выходных данных одной команды во входные данные второй команды, используя оператор. Но в отличие от аналога в Unix, конвейер PowerShell является полностью объектным, то есть данные между командлетами передаются в виде полноценных объектов соответствующих типов, а не как поток байтов. Когда данные передаются как объекты, содержащиеся в них элементы сохраняют свою структуру и типы между командлетами, без необходимости использования какой либо сериализации или посимвольного разбора (parsing) данных, как в случаях когда доступны лишь байтовые потоки. Объект также может содержать некоторые функции, предназначенные для работы с данными. Они также становятся доступными для получающего их командлета. Вывод последнего командлета в конвейере PowerShell автоматически передаёт на командлет Write-Host, который создаёт текстовое представление объектов и содержащихся в них данных и выводит его на экран.

Так как все объекты PowerShell являются объектами .NET, они содержат метод .ToString(), возвращающий текстовое представление данных объекта. PowerShell использует этот метод для преобразования объекта в текст. Кроме того, он позволяет указать правила форматирования, так что текстовое представление объектов может быть настроено. Однако, с целью поддержания совместимости, если в конвейере используется внешний исполняемый файл, то он получает текстовый поток, представляющий объект, и не интегрируется с системой типов PowerShell.

Расширяемая система типов (Extended Type System, ETS) PowerShell базируется на системе типов .NET, но реализует некоторые дополнения. Например, она позволяет создавать различные представления объектов, отображая лишь некоторые из их свойств и методов, а также применять специальное форматирование и механизмы сортировки. Эти представления привязываются к оригинальным объектам с помощью конфигурационных файлов в формате XML.

1.1 Командлеты

Командлеты (Cmdlets) - это специализированные команды PowerShell’а, которые реализуют различную функциональность. Это родные для PowerShell’а команды. Командлеты именуются по правилу Глагол-Существительное (Verb-Noun), например Get-ChildItem, благодаря чему их предназначение понятно из названия. Командлеты выводят результаты в виде объектов или их коллекций. Опционально командлеты могут получать входные данные в такой же форме и, соответственно, использоваться как получатели в конвейере. Хотя PowerShell позволяет передавать по конвейеру массивы и другие коллекции, командлеты всегда обрабатывают объекты поочередно. Для коллекции объектов обработчик командлета вызывается для каждого объекта в коллекции по очереди.

Командлеты являются специализированными классами .NET, экземпляры которых создаются в PowerShell и запускаются им при вызове. Командлеты наследуются от Cmdlet или от PSCmdlet, причём последний используется тогда, когда командлету необходимо взаимодействовать с исполняемой частью PowerShell (PowerShell runtime). В этих базовых классах оговорены некоторые методы - BeginProcessing(), ProcessRecord() и EndProcessing(), как минимум один из которых реализация командлета должна перезаписать для предоставления своей функциональности. Каждый раз при запуске командлета эти методы вызываются PowerShell’ом по очереди. Сначала вызывается BeginProcessing(), затем, если командлету передаются данные по конвейеру, - ProcessRecord() для каждого элемента, и в самом конце - EndProcessing(). Класс, реализующий Cmdlet, должен иметь один атрибут .NET - CmdletAttribute, в котором указываются глагол (Verb) и существительное (Noun), составляющие имя командлета. Популярные глаголы (рекомендуется использовать только их) представлены в виде перечисления (Enum).

Реализации командлетов могут вызывать любые доступные .NET API и могут быть написаны на любом языке .NET. PowerShell также предоставляет некоторые дополнительные API, такие как WriteObject(), которые необходимы для доступа к специфичной для PowerShell функциональности, например для вывода результирующих объектов в конвейер. Командлеты могут использовать API для доступа к данным напрямую или воспользоваться инфраструктурой поставщиков (Provider) PowerShell, которые позволяют обращаться к хранилищам данных через уникальные пути. Хранилища данных представляются через буквы дисков и иерархическую структуру внутри них (директории). Windows PowerShell поставляется с поставщиками для файловой системы, реестра Windows, хранилища сертификатов, а также для псевдонимов команд (alias:), переменных (variable:) и функций (functions:). Другие приложения тоже могут добавлять свои командлеты и поставщики для доступа к своим хранилищам данных.

В PowerShell V2 была добавлена возможность создания командлетов на самом PowerShell, без использования .NET языков.

1.2 Конвейер

В PowerShell, как и в оболочках Unix/Linux, присутствует конвейер. Этот конвейер служит для передачи выходных данных одного командлета во входные данные другого командлета. В частности, пользователь может вывести результаты командлета Get-Process в командлет Sort-Object (например, для сортировки процессов по дескрипторам (handles) ), затем в Where-Object, чтобы отфильтровать процессы, которые, например, занимают меньше 1 МБ страничной памяти, и в конце концов передать результаты в командлет Select-Object, чтобы выбрать только первые 10 процессов (по количеству дескрипторов).

Концепция конвейера изначально используется в Unix/Linux системах (см. Конвейер (UNIX)) , PowerShell отличается от них. В Unix/Linux вывод одной команды передаётся на следующий этап конвейера в бинарной форме, т.е. являет собой фактически поток данных. Рассмотрим пример Unix/Linux shell:

dd if=/dev/zero bs=1M count=1M | bzip2 -z9 -c > ex.bz2

поток "нулей" блоками по 1 МБ в количестве 1Миллиона раз (из устройства /dev/zero) командой dd (копирования специальных файлов) передаётся на ввод команды Bzip2, которая их сжимает максимально возможно (с точки зрения алгоритма сжатия bzip2, опция -z9) и результирующий поток передаёт на stdout (опция -с), который в свою очередь перенаправляется в файл ex.bz2. Результатом выполнения такой относительно короткой команды станет создание архива, внутри которого будет 1Т поток нулевых байтов. Сам процесс создания такого архива применяет в данном случае 2-а последовательных конвейера.

Реализовать подобную функциональность и гибкость в Windows средствами самой ОС Windows долгое время было практически невозможным. Заделать данную брешь в средах Windows и был фактически призван PowerShell являющийся неким подобием Unix shell например как Bourne shell.

В PowerShell конвейер состоит из объектов .NET. что вряд ли увеличивает быстродействие межпроцессного взаимодействия (IPC) см. Межпроцессное_взаимодействие.

1.3 Сценарии

включает язык сценариев с динамическими типами, на котором можно реализовывать сложные операции с использованием командлетов. Язык сценариев поддерживает переменные, функции, конструкции ветвления (if-then-else) циклы (while, do, for и foreach), структурированную обработку ошибок и множество других возможностей, включая интеграцию с .NET. Переменные в PowerShell обозначаются префиксом $ перед именем; им может быть присвоено любое значение, включая вывод командлетов. Хотя сам язык не строго типизирован, внутри переменные сохраняются с их типами, которые могут быть базовыми типами (primitive types) или объектами. Строки могут быть заключены в одиночные кавычки или в двойные кавычки: при использовании двойных кавычек переменные, содержащиеся в строке, будут заменены их значениями. В соответствии с синтаксисом переменных, если путь к файлу помещен в фигурные скобки с предшествующим знаком доллара (то есть $C:\foo.txt), то это будет ссылкой на содержимое файла. Всё, что будет назначено такой переменной, будет записано в файл, и наоборот - при обращении к её содержимому будет выдано содержимое файла.

К свойствам и методам объекта можно обращаться, используя точку (.), как в синтаксисе C#. PowerShell предоставляет специальные переменные, такие как $args, содержащую массив всех неименованных аргументов командной строки, переданных функции, или $_, ссылающуюся на текущий объект в конвейере и других конструкциях. В PowerShell также присутствуют массивы и ассоциативные массивы. Кроме того, PowerShell автоматически вычисляет арифметические выражения, введённые в командной строке, и понимает популярные аббриевиатуры, такие как GB, MB и KB.

В PowerShell можно создавать собственные функции, принимающие параметры с помощью ключевого слова function. Популярная проблема для многих начинающих - то, что функции принимают аргументы, разделённые не запятыми, а пробелами (как утилиты командной строки или командлеты):

<function> <param1> <param2>: Вызывает функцию с двумя аргументами.

(Эти аргументы могут быть привязаны к параметрам, указанным в объявлении функции. Также к ним можно обратиться через массив $args.

<function>(<param1>, <param2>): Вызывает функцию с одним аргументом, который является массивом из двух элементов.позволяет вызывать любые методы .NET, заключив их пространство имён в квадратные скобки ([]), и затем используя пару двоеточий (::) для указания статического метода. Например [System.Console]::WriteLine("PowerShell"). Объекты создаются с помощью командлета New-Object, добавлять к ним новые свойства можно используя командлет Add-Member.

Для обработки ошибок PowerShell предоставляет механизм, основанный на .NET. В случае ошибки выдаются объекты, содержащие информацию об ошибке (объект Exception), которые перехватываются ключевым словом trap. Однако поведение при возникновении ошибок настраивается. Так, можно настроить PowerShell, чтобы в случае ошибки он молча продолжал выполнение без перехвата ошибки. Во второй версии PowerShell также была добавлена конструкция Try Catch Finally.

Сценарии, написанные в PowerShell, можно сохранять между сессиями в файлах .ps1. Затем можно использовать весь сценарий или индивидуальные функции из него. Сценарии и функции используются подобно командлетам, то есть они могут быть командами в конвейере, им можно передавать параметры. Объекты могут прозрачно передаваться между сценариями, функциями и командлетами в конвейере. Однако выполнение сценариев PowerShell по умолчанию запрещено, и его надо включить с помощью командлета Set-ExecutionPolicy. Сценарии PowerShell могут быть подписаны цифровой подписью для проверки их целостности.

2. РАЗРАБОТКА

.1 Создание отчёта об установленном программном обеспечении

Напишем небольшой скрипт создания html файл в c:\users\username, где будет отображаться список недавно установленных программ, сортированных по дате. Программы, установленные недавно будут отображаться в начале списка.

#переменная

$vUserName = (Get-Item env:\username).Value

$vComputerName = (Get-Item env:\Computername).Value

$filepath = (Get-ChildItem env:\userprofile).value

$name = (Get-Item env:\Computername).Value

## Html Style

$a = "<style>"

$a = $a + "BODY{background-color:Lavender ;}"

$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"

$a = $a + "TH{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:thistle}"

$a = $a + "TD{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"

$a = $a + "</style>"

# удаленние старого отчёта, если существует.

if (test-Path $filepath\$name.html) { remove-Item $filepath\$name.html;Host -ForegroundColor white -BackgroundColor Red "Old file removed"

}

# Управление командойHtml -Title "Software Information for $name" -Body "<h1> Computer Name: $name </h1>" > "$filepath\$name.html"WmiObject win32_Product -ComputerName $name | Select Name,Version,PackageName,Installdate,Vendor | Sort Installdate -Descending `

| ConvertTo-html -Head $a -Body "<H2> Software Installed</H2>" >> "$filepath\$name.html"

$Report = "The Report is generated On $(get-date) by $((Get-Item env:\username).Value) on computer $((Get-Item env:\Computername).Value)"

$Report >> "$filepath\$name.html"Host "file is saved in $filepath and the name of file is $name.html" -ForegroundColor CyanExpression "$filepath\$name.html"

## конец срипта

Рисунок 1 - Вид отчёта

2.2 Опрос всех машин в заданном ip диапазоне

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

function Get-ComputerNameByIP {(

$IPAddress = $null

} elseif ($IPAddress) {

([System.Net.Dns]::GetHostbyAddress($IPAddress))

} elseif ($_) {[Exception] {warning $_.Exception.Message;

}

[System.Net.Dns]::GetHostbyAddress($_)

} else {

$IPAddress = Read-Host “Please supply the IP Address”

[System.Net.Dns]::GetHostbyAddress($IPAddress)

}

}{ }

}Check-Online {(

$computername

)connection -count 1 -ComputerName $computername -TimeToLive 5 -asJob |Job |Job |Object { $_.StatusCode -eq 0 } |Object -ExpandProperty Address StatusCode

}

$Start = Get-Date

$ips = 1..254 | ForEach-Object { "192.168.1.$_" }

$online = Check-Online -computername $ips

$online($PC in $online) {ComputerNameByIP $PC

}

$End = Get-DateHost "`nStarted at: " $Start

Write-Host "Ended at: " $End

Как будет выглядеть отчёт о сканировании компьютеров в сети, мы можем видеть на рисунке 2.

рowershell скрипт программный обеспечение

Рисунок 2 - Вид отчёта об опросе компьютеров

ЗАКЛЮЧЕНИЕ

- это расширяемая оболочка с интерфейсом командной строки и сопутствующий язык сценариев. Упрощает выполнение часто используемых задач, позволяет сократить время администрирования рабочих станций и серверов, а также обеспечивает возможность тонкой настройки компонентов ОС Windows.

То обстоятельство, что работа оболочки PowerShell основана на .NET Framework, является главным ее отличием от предыдущих командных оболочек Windows. PowerShell полностью объектно-ориентирована. Результатом выполнения команды в PowerShell является не некий «текст сам по себе», а объект платформы .NET. Этот объект представляет собой собственно данные и имеет набор присущих ему свойств и методов.

Сегодня PowerShell является частью ОС Win2k8R2 и Win7 и встроен в графические консоли администрирования последних продуктов Microsoft (например, Exchange 2007 и System Center 2007).

Интерфейс программирования приложений ADSI предназначен для доступа к службе Active Directory и позволяет создавать, изменять и удалять объекты в каталогах, выполнять поиск и множество других операций.

При использовании QAD команды для работы с AD выглядят на порядок проще, а скрипты читабельнее.командлеты понадобятся в случае использования некоторых GUI к PowerShell, в которых имеется функция для работы с Active Directory (например, PowerGUI).

Производители программного обеспечения не остаются в стороне и разрабатывают большое количество командлетов.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. http://technet.microsoft.com/en-us/library/bb978526.aspx

2. PowerShell как средство автоматического администрирования, автор: И.В. Коробко <http://www.ozon.ru/context/detail/id/17569241/>.

. Windows PowerShell 2.0. Справочник администратора, автор: Уильям Р. Станек <http://www.ozon.ru/context/detail/id/5009783/>.

4. Microsoft Windows Command-Line: Administrator's Pocket Consultant, автор: Уильям Р. Станек <http://www.ozon.ru/context/detail/id/4284285/>.

5. Введение в Windows PowerShell <http://oz.by/books/more1055762.html> , Андрей Попов, 2009.

ПРИЛОЖЕНИЕ

$vUserName = (Get-Item env:\username).Value

$vComputerName = (Get-Item env:\Computername).Value

$filepath = (Get-ChildItem env:\userprofile).value

$name = (Get-Item env:\Computername).Value

$a = "<style>"

$a = $a + "BODY{background-color:Lavender ;}"

$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"

$a = $a + "TH{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:thistle}"

$a = $a + "TD{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:PaleGoldenrod}"

$a = $a + "</style>"(test-Path $filepath\$name.html) { remove-Item $filepath\$name.html;Host -ForegroundColor white -BackgroundColor Red "Old file removed"

}

# Управление командойHtml -Title "Software Information for $name" -Body "<h1> Computer Name: $name </h1>" > "$filepath\$name.html"WmiObject win32_Product -ComputerName $name | Select Name,Version,PackageName,Installdate,Vendor | Sort Installdate -Descending `

| ConvertTo-html -Head $a -Body "<H2> Software Installed</H2>" >> "$filepath\$name.html"

$Report = "The Report is generated On $(get-date) by $((Get-Item env:\username).Value) on computer $((Get-Item env:\Computername).Value)"

$Report >> "$filepath\$name.html"Host "file is saved in $filepath and the name of file is $name.html" -ForegroundColor CyanExpression "$filepath\$name.html"Get-ComputerNameByIP {(

$IPAddress = $null

){ }{($IPAddress -and $_) {‘Please use either pipeline or input parameter’

} elseif ($IPAddress) {

([System.Net.Dns]::GetHostbyAddress($IPAddress))

} elseif ($_) {[Exception] {warning $_.Exception.Message;

}

[System.Net.Dns]::GetHostbyAddress($_)

} else {

$IPAddress = Read-Host “Please supply the IP Address”

[System.Net.Dns]::GetHostbyAddress($IPAddress)

}

}{ }

}Check-Online {(

$computername

) test-connection -count 1 -ComputerName $computername -TimeToLive 5 -asJob |Job |Job |Object { $_.StatusCode -eq 0 } |Object -ExpandProperty Address StatusCode

}

$ips = 1..254 | ForEach-Object { "192.168.1.$_" }

$online = Check-Online -computername $ips

$online($PC in $online) {ComputerNameByIP $PC

}

$End = Get-DateHost "`nStarted at: " $StartHost "Ended at: " $End

Похожие работы на - Администрирование на PowerShell

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!