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

Автор: Пользователь скрыл имя, 03 Марта 2013 в 11:10, курсовая работа

Описание работы

Windows PowerShell — расширяемое средство автоматизации от Microsoft, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев. Впервые публично язык был продемонстрирован на PDC (Professional Developers Conference) в сентябре 2003 г. под кодовым названием «Monad». Версия 1.0 выпущена в 2006 году и сейчас доступна для Windows XP SP2/SP3, Windows Server 2003, Windows Vista, и встроена в Windows Server 2008 как опциональный компонент.

Содержание

ВВЕДЕНИЕ 3
ПОСТАНОВКА ЗАДАЧИ 4
КРАТКИЙ ОБЗОР POWERSHELL 5
1.1 Командлеты 6
1.2 Конвейер 7
1.3 Сценарии 8
РАЗРАБОТКА 11
ЗАКЛЮЧЕНИЕ 15
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 16
ПРИЛОЖЕНИЕ 17

Работа содержит 1 файл

Курсовой.doc

— 325.50 Кб (Скачать)

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

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

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

  1. <function>(<param1>, <param2>): Вызывает функцию с одним аргументом, который является массивом из двух элементов.

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

РАЗРАБОТКА

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;

        Write-Host -ForegroundColor white -BackgroundColor Red    "Old file removed"

        }

    # Управление командой 

 

        ConvertTo-Html -Title "Software Information for $name" -Body "<h1> Computer Name : $name </h1>" >  "$filepath\$name.html"

        Get-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" 

 

        write-Host "file is saved in $filepath and the name of file is $name.html" -ForegroundColor Cyan

        invoke-Expression "$filepath\$name.html" 

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

    

 

 

 

 


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

 

 

 

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

 

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

 

function Get-ComputerNameByIP {

param(

$IPAddress = $null

)

 

begin { }

 

process {

if ($IPAddress -and $_) {

Throw ‘Please use either pipeline or input parameter’

break

} elseif ($IPAddress) {

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

} elseif ($_) {

trap [Exception] {

write-warning $_.Exception.Message

continue;

}

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

} else {

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

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

}

}

 

end { }

 

}

 

function Check-Online {

param(

$computername

)

 

test-connection -count 1 -ComputerName $computername -TimeToLive 5 -asJob |

Wait-Job |

Receive-Job |

Where-Object { $_.StatusCode -eq 0 } |

Select-Object -ExpandProperty Address StatusCode

}

 

 

$Start = Get-Date

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

$online = Check-Online -computername $ips

$online

 

foreach ($PC in $online) {

Get-ComputerNameByIP $PC

}

 

$End = Get-Date

Write-Host "`nStarted at: " $Start

Write-Host "Ended at: " $End

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

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

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

  1. Сегодня PowerShell является частью ОС Win2k8R2 и Win7 и встроен в графические консоли администрирования последних продуктов Microsoft (например, Exchange 2007 и System Center 2007).
  2. Интерфейс программирования приложений ADSI предназначен для доступа к службе Active Directory и позволяет создавать, изменять и удалять объекты в каталогах, выполнять поиск и множество других операций.
  3. При использовании QAD команды для работы с AD выглядят на порядок проще, а скрипты читабельнее.
  4. QAD командлеты понадобятся в случае использования некоторых GUI к PowerShell, в которых имеется функция для работы с Active Directory (например, PowerGUI).
  5. Производители программного обеспечения не остаются в стороне и разрабатывают большое количество командлетов.

 

 

 

 

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

 

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

2. PowerShell как средство автоматического администрирования, автор: И. В. Коробко

3. Windows PowerShell 2.0. Справочник администратора, автор: Уильям Р. Станек

4. Microsoft Windows Command-Line: Administrator's Pocket Consultant, автор: Уильям Р. Станек.

5. Введение в Windows PowerShell , Андрей Попов, 2009

 

 

 

ПРИЛОЖЕНИЕ

 

1

        $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>"

 

            if (test-Path $filepath\$name.html) { remove-Item $filepath\$name.html;

        Write-Host -ForegroundColor white -BackgroundColor Red    "Old file removed"

        }

    # Управление командой 

 

        ConvertTo-Html -Title "Software Information for $name" -Body "<h1> Computer Name : $name </h1>" >  "$filepath\$name.html"

        Get-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" 

 

        write-Host "file is saved in $filepath and the name of file is $name.html" -ForegroundColor Cyan

        invoke-Expression "$filepath\$name.html" 

    

 

2

 

function Get-ComputerNameByIP {

param(

$IPAddress = $null

)

 

begin { }

 

process {

if ($IPAddress -and $_) {

Throw ‘Please use either pipeline or input parameter’

break

} elseif ($IPAddress) {

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

} elseif ($_) {

trap [Exception] {

write-warning $_.Exception.Message

continue;

}

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

} else {

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

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

}

}

 

end { }

 

}

 

function Check-Online {

param(

$computername

)

 

test-connection -count 1 -ComputerName $computername -TimeToLive 5 -asJob |

Wait-Job |

Receive-Job |

Where-Object { $_.StatusCode -eq 0 } |

Select-Object -ExpandProperty Address StatusCode

}

 

 

$Start = Get-Date

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

$online = Check-Online -computername $ips

$online

 

foreach ($PC in $online) {

Get-ComputerNameByIP $PC

}

 

$End = Get-Date

Write-Host "`nStarted at: " $Start

Write-Host "Ended at: " $End




Информация о работе Администрирование на PowerShell