РАЗДЕЛ
	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 по адресу 
		http://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