Поиск…


Вступление

Модули 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
    {
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow