РАЗДЕЛ
    about_Scripts

КРАТКОЕ ОПИСАНИЕ
    Описание написания и выполнения скриптов в Windows PowerShell.

ПОЛНОЕ ОПИСАНИЕ
    Скрипт - это текстовый файл, содержащий одну или несколько команд 
    Windows PowerShell. Файлы скриптов Windows PowerShell имеют 
    расширение PS1. 

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

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

 КАК НАПИСАТЬ СКРИПТ

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

    Для написания скрипта нужно запустить текстовый редактор (например, 
    Блокнот) или редактор скриптов, например, интегрированную среду 
    скриптов Windows PowerShell (ISE). После этого ввести команды и 
    сохранить их в файле с допустимым именем и расширением PS1. 

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

        $date = (get-date).dayofyear
        get-service | out-file "$date.log"

    Для создания этого скрипта нужно открыть текстовый редактор или 
    редактор скриптов и ввести эти команды, а затем сохранить их в 
    файле с именем ServiceLog.ps1. 


 ВЫПОЛНЕНИЕ СКРИПТА

    Прежде чем выполнить скрипт, нужно изменить установленную по 
    умолчанию политику исполнения Windows PowerShell. Установленная 
    по умолчанию политика исполнения запрещает выполнение любых 
    скриптов, в том числе скриптов, созданных на локальном 
    компьютере. Дополнительные сведения см. в разделе about_Execution_
    Policies.

    Для выполнения скрипта нужно ввести полное имя файла скрипта и 
    полный путь к нему. 

    Например, для выполнения скрипта ServicesLog из каталога 
    C:\Scripts введите следующую команду:

        c:\scripts\ServicesLog.ps1

    Для выполнения скрипта из текущего каталога нужно ввести путь к 
    текущему каталогу или использовать точку для обозначения текущего 
    каталога и обратную косую черту для обозначения пути (.\).

    Например, для выполнения скрипта ServicesLog.ps1 из локального 
    каталога введите следующую команду:

        .\ServicesLog.ps1

    Для обеспечения безопасности Windows PowerShell не выполняет 
    скрипты при двойном щелчке значка скрипта в проводнике и при 
    вводе имени скрипта без указания полного пути, даже если скрипт 
    находится в текущем каталоге. Дополнительные сведения о 
    выполнении команд и скриптов в Windows PowerShell см. в разделе 
    about_Command_Precedence.


 УДАЛЕННОЕ ВЫПОЛНЕНИЕ СКРИПТОВ

    Для выполнения скрипта на удаленном компьютере нужно использовать 
    параметр FilePath командлета Invoke-Command.

    В качестве значения параметра FilePath нужно ввести путь и имя файла 
    скрипта. Скрипт должен располагаться на локальном компьютере или 
    в каталоге, доступ к которому с локального компьютера открыт. 

    Следующая команда выполняет скрипт ServicesLog.ps1 на удаленном 
    компьютере Server01.

        invoke-command -computername Server01 -filepath C:\scripts\servicesLog.ps1 



 ПАРАМЕТРЫ В СКРИПТАХ

    Для определения параметров в скрипте нужно использовать 
    инструкцию Param. Инструкция Param должна быть первой в скрипте, 
    за исключением комментариев и инструкций #Requires.

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

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

    В следующем примере показан скрипт Test-Remote.ps1 с параметром 
    ComputerName. Обе функции скрипта могут использовать значение 
    параметра ComputerName.

        param ($ComputerName = $(throw "ComputerName parameter is required."))

        function CanPing {
           $error.clear()
           $tmp = test-connection $computername -erroraction SilentlyContinue

           if (!$?) 
               {write-host "Ping failed: $ComputerName."; return $false}
           else
               {write-host "Ping succeeded: $ComputerName"; return $true}
        }

        function CanRemote {
            $s = new-pssession $computername -erroraction SilentlyContinue

            if ($s -is [System.Management.Automation.Runspaces.PSSession])
                {write-host "Remote test succeeded: $ComputerName."}
            else
                {write-host "Remote test failed: $ComputerName."}
        }

        if (CanPing $computername) {CanRemote $computername}


    Для выполнения этого скрипта нужно ввести имя параметра после 
    имени файла скрипта.  Пример:

	C:\PS> .\test-remote.ps1 -computername Server01

	Ping succeeded: Server01
	Remote test failed: Server01


    Дополнительные сведения о выражении Param и параметрах функций 
    см. в разделах about_Functions и about_Functions_Advanced_Parameters.



 СПРАВКА ДЛЯ СКРИПТОВ

    Командлет Get-Help позволяет получить справку для скриптов, а 
    также для командлетов, поставщиков и функций. Чтобы получить 
    справку для скрипта, введите Get-Help и укажите путь и имя файла 
    скрипта. Если путь к скрипту указан в переменной среды Path, его 
    можно не указывать.

    Например, для получения справки для скрипта ServicesLog.ps1 
    введите следующую команду:

        get-help C:\admin\scripts\ServicesLog.ps1

    Справку для скрипта можно написать с помощью любого из следующих 
    двух методов:

    --  Справка для скриптов на основе комментариев

        Темы справки создаются посредством использования в 
        комментариях специальных ключевых слов. Для создания справки 
        для скрипта на основе комментариев, комментарии нужно 
        разместить в начале или в конце файла скрипта. Дополнительные 
        сведения о справке на основе комментариев см. в разделе 
        about_Comment_Based_Help.

    --  Справка для скриптов на основе XML

        Создайте раздел справки XML подобно тому, как это делается 
        для командлетов. Справка на основе XML нужна в том случае, 
        если разделы справки переводятся на различные языки. 

        Для привязки скрипта к теме справки на основе XML нужно 
        использовать ключевое слово комментария справки 
        .ExternalHelp. Дополнительные сведения о ключевом слове 
        ExternalHelp см. в разделе about_Comment_Based_Help. 
        Дополнительные сведения о справке на основе XML см. в разделе 
        "How to Write Cmdlet Help" (Как писать справку для 
        командлетов) в библиотеке MSDN по адресу 
        https://go.microsoft.com/fwlink/?LinkID=123415.



 ОБЛАСТЬ ДЕЙСТВИЯ СКРИПТА И ЗАПИСЬ С ПОМОЩЬЮ ТОЧЕК

    Каждый скрипт выполняется в своей области действия. Функции, 
    переменные, псевдонимы и диски, создаваемые в скрипте, существуют 
    только в области действия скрипта. Эти элементы и их значения 
    недоступны в области, в которой запущен скрипт.

    Для выполнения скрипта в другой области можно указать ее при 
    запуске (глобальную или локальную) или использовать запись с точками.

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

    Для выполнения скрипта с использованием записи с точками нужно 
    ввести точку (.) и пробел перед путем к скрипту.

    Пример:

        . C:\scripts\UtilityFunctions.ps1

    -или-

        . .\UtilityFunctions.ps1


    После выполнения скрипта UtilityFunctions функции и переменные, 
    создаваемые скриптом, добавляются в текущую область. 
    Например, скрипт UtilityFunctions.ps1 создает функцию New-Profile 
    и переменную $ProfileName.

        #In UtilityFunctions.ps1

        function New-Profile
        {
            Write-Host "Running New-Profile function"
            $profileName = split-path $profile -leaf

            if (test-path $profile)
               {write-error "There is already a $profileName profile on this computer."}
            else
	       {new-item -type file -path $profile -force }
        }


    При выполнении скрипта UtilityFunctions.ps1 в собственной области 
    функция New-Profile и переменная $ProfileName существуют только 
    во время работы скрипта. После завершения работы скрипта функция 
    и переменная удаляются, как показано в следующем примере.

        C:\PS> .\UtilityFunctions.ps1

        C:\PS> New-Profile
        Условие "new-profile" не распознано как командлет, функция, 
        выполняемая программа или файл скрипта. Проверьте условие и 
        повторите попытку.
        В строке:1 знак:12
        + new-profile <<<< 
           + CategoryInfo          : ObjectNotFound: (new-profile:String) [], 
           + FullyQualifiedErrorId : CommandNotFoundException
        C:\PS> $profileName
        C:\PS>


    При выполнении скрипта с использованием записи с помощью точек 
    скрипт создает функцию New-Profile и переменную $ProfileName в 
    текущем сеансе в текущей области. После выполнения скрипта 
    функцию New-Profile можно использовать в сеансе, как показано в 
    следующем примере.

        C:\PS> . .\UtilityFunctions.ps1

        C:\PS> New-Profile


            Directory: C:\Users\juneb\Documents\WindowsPowerShell


            Mode    LastWriteTime     Length Name 
            ----    -------------     ------ ----
            -a---   1/14/2009 3:08 PM      0 Microsoft.PowerShellISE_profile.ps1


        C:\PS> $profileName
        Microsoft.PowerShellISE_profile.ps1


    Дополнительные сведения об областях см. в разделе about_Scopes.



 СКРИПТЫ В МОДУЛЯХ

    Модуль представляет собой набор связанных ресурсов Windows 
    PowerShell, который можно распространять в качестве единого 
    целого. Модули можно использовать для организации скриптов, 
    функций и других ресурсов. Также модули можно использовать для 
    распространения кода и для получения кода из надежных источников.

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

    Дополнительные сведения о модулях см. в разделе about_Modules.



 ДРУГИЕ ВОЗМОЖНОСТИ В СКРИПТАХ 

    В Windows PowerShell имеется множество полезных средств, которые 
    можно использовать в скриптах.

    #Requires 
        Выражение #Requires можно использовать, чтобы скрипт не 
        выполнялся без указанных модулей или оснасток или при 
        отсутствии указанной версии Windows PowerShell. 
        Дополнительные сведения см. в разделе about_Requires.

    $MyInvocation
        Автоматическая переменная $MyInvocation содержит информацию о 
        текущей команде, в том числе о текущем скрипте. Эту 
        переменную и ее свойства можно использовать для получения 
        информации о скрипте во время его работы. Например, переменная 
        $MyInvocation.MyCommand.Path содержит путь и имя файла скрипта.

    Разделы данных
        Ключевое слово Data можно использовать для разделения в 
        скриптах данных и логики. Использование разделов данных также 
	упрощает локализацию. Дополнительные сведения см. в разделах 
	about_Data_Sections и about_Script_Localization.

    Подписание скриптов
        В скрипты можно добавлять цифровые подписи. В зависимости от 
        политики исполнения цифровые подписи можно использовать для 
        ограничения выполнения скриптов, которые могут содержать 
        небезопасные команды. Дополнительные сведения см. в разделах 
        about_Execution_Policies и about_Signing.



СМ. ТАКЖЕ
    about_Command_Precedence
    about_Comment_Based_Help
    about_Execution_Policies
    about_Functions
    about_Modules
    about_Profiles
    about_Requires
    about_Scopes
    about_Script_Blocks
    about_Signing
    Invoke-Command




Содержание