PowerShell
Модули, скрипты и функции
Поиск…
Вступление
Модули PowerShell расширяют возможности системного администратора, администратора баз данных и разработчика. Является ли это просто методом совместного использования функций и скриптов.
Функции Powershell должны избегать повторных кодов. См. [Функции PS] [1] [1]: Функции PowerShell
Сценарии PowerShell используются для автоматизации административных задач, которые состоят из командной строки оболочки и связанных командлетов, построенных поверх .NET Framework.
функция
Функция представляет собой именованный блок кода, который используется для определения многоразового кода, который должен быть простым в использовании. Он обычно включается внутри скрипта, чтобы помочь повторно использовать код (чтобы избежать дублирования кода) или распространяться как часть модуля, чтобы сделать его полезным для других в нескольких сценариях.
Сценарии, в которых функция может быть полезной:
- Вычислить среднее значение для группы чисел
- Создание отчета для запуска процессов
- Напишите функцию, которая проверяет компьютер, является «здоровой», пинговая компьютер и доступ к
c$
-share
Функции создаются с использованием ключевого слова function
, за которым следует однословное имя и блок сценария, содержащий код для выполнения при вызове имени функции.
function NameOfFunction {
Your code
}
демонстрация
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
Использование:
> HelloWorld
Greetings from PowerShell!
скрипт
Сценарий представляет собой текстовый файл с расширением файла .ps1
который содержит команды PowerShell, которые будут выполняться при вызове сценария. Поскольку скрипты являются сохраненными файлами, их легко переносить между компьютерами.
Сценарии часто записываются для решения конкретной проблемы, например:
- Запуск еженедельной задачи обслуживания
- Чтобы установить и настроить решение / приложение на компьютере
демонстрация
MyFirstScript.ps1:
Write-Host "Hello World!"
2+2
Вы можете запустить скрипт, введя путь к файлу, используя:
- Абсолютный путь, например.
c:\MyFirstScript.ps1
- Относительный путь, например
.\MyFirstScript.ps1
если текущий каталог вашей консоли PowerShell былC:\
Использование:
> .\MyFirstScript.ps1
Hello World!
4
Сценарий также может импортировать модули, определять его собственные функции и т. Д.
MySecondScript.ps1:
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld
Использование:
> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!
модуль
Модуль представляет собой набор связанных функций многократного использования (или командлетов), которые могут быть легко распространены среди других пользователей PowerShell и использованы в нескольких сценариях или непосредственно в консоли. Модуль обычно сохраняется в его собственном каталоге и состоит из:
- Один или несколько файлов кода с
.psm1
файла.psm1
содержащим функции или бинарные сборки (.dll
), содержащие командлеты - Модуль manifest
.psd1
описывающий имя, версию, автор, описание, функции / командлеты, которые он предоставляет и т. Д. - Другие требования к его работе, в т.ч. зависимостей, скриптов и т. д.
Примеры модулей:
- Модуль, содержащий функции / командлеты, которые выполняют статистику по набору данных
- Модуль для запросов и настройки баз данных
Чтобы PowerShell легко находил и импортировал модуль, он часто помещается в один из известных модулей модулей PowerShell, определенных в $env:PSModulePath
.
демонстрация
Список модулей, которые установлены в одном из известных модулей:
Get-Module -ListAvailable
Импортируйте модуль, например. Модуль Hyper-V
:
Import-Module Hyper-V
Список доступных команд в модуле, например. Microsoft.PowerShell.Archive
-модуль
> Import-Module Microsoft.PowerShell.Archive
> Get-Command -Module Microsoft.PowerShell.Archive
CommandType Name Version Source
----------- ---- ------- ------
Function Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Function Expand-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Расширенные функции
Расширенные функции ведут себя так же, как командлеты. PowerShell ISE включает в себя два скелета расширенных функций. Получите доступ к ним через меню, отредактируйте фрагменты кода или Ctrl + J. (Начиная с версии PS 3.0, более поздние версии могут отличаться)
Ключевые вещи, которые включают в себя расширенные функции,
- встроенная, настраиваемая справка для функции, доступная через
Get-Help
- может использовать [CmdletBinding ()], что заставляет функцию действовать как командлет
- расширенные параметры параметров
Простая версия:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Verb-Noun
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Param1,
# Param2 help description
[int]
$Param2
)
Begin
{
}
Process
{
}
End
{
}
}
Полная версия:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
.INPUTS
Inputs to this cmdlet (if any)
.OUTPUTS
Output from this cmdlet (if any)
.NOTES
General notes
.COMPONENT
The component this cmdlet belongs to
.ROLE
The role this cmdlet belongs to
.FUNCTIONALITY
The functionality that best describes this cmdlet
#>
function Verb-Noun
{
[CmdletBinding(DefaultParameterSetName='Parameter Set 1',
SupportsShouldProcess=$true,
PositionalBinding=$false,
HelpUri = 'http://www.microsoft.com/',
ConfirmImpact='Medium')]
[OutputType([String])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
ValueFromRemainingArguments=$false,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[ValidateCount(0,5)]
[ValidateSet("sun", "moon", "earth")]
[Alias("p1")]
$Param1,
# Param2 help description
[Parameter(ParameterSetName='Parameter Set 1')]
[AllowNull()]
[AllowEmptyCollection()]
[AllowEmptyString()]
[ValidateScript({$true})]
[ValidateRange(0,5)]
[int]
$Param2,
# Param3 help description
[Parameter(ParameterSetName='Another Parameter Set')]
[ValidatePattern("[a-z]*")]
[ValidateLength(0,15)]
[String]
$Param3
)
Begin
{
}
Process
{
if ($pscmdlet.ShouldProcess("Target", "Operation"))
{
}
}
End
{
}
}