РАЗДЕЛ
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