Автор: Пользователь скрыл имя, 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
В PowerShell можно создавать собственные
функции, принимающие параметры
с помощью ключевого слова func
(Эти аргументы могут быть привязаны к параметрам, указанным в объявлении функции. Также к ним можно обратиться через массив $args.
PowerShell позволяет вызывать любые
методы .NET, заключив их пространство
имён в квадратные скобки ([]), и затем используя пару двоеточий
(::) для указания статического
метода. Например [System.Console]::WriteLine("
Для обработки ошибок 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:
$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:
$a = $a + "TD{border-width:
1px;padding: 3px;border-style: solid;border-color: black;background-color:
$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,
$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]::
} elseif ($_) {
trap [Exception] {
write-warning $_.Exception.Message
continue;
}
[System.Net.Dns]::
} else {
$IPAddress = Read-Host “Please supply the IP Address”
[System.Net.Dns]::
}
}
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 полностью объектно-
1. http://technet.microsoft.com/
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:
$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:
$a = $a + "TD{border-width:
1px;padding: 3px;border-style: solid;border-color: black;background-color:
$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,
$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]::
} elseif ($_) {
trap [Exception] {
write-warning $_.Exception.Message
continue;
}
[System.Net.Dns]::
} else {
$IPAddress = Read-Host “Please supply the IP Address”
[System.Net.Dns]::
}
}
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