РАЗДЕЛ
	about_Types.ps1xml

КРАТКОЕ ОПИСАНИЕ
	Описывает, как с помощью файлов Types.ps1xml расширить типы 
	Microsoft .NET Framework объектов, используемых в Windows PowerShell. 

ПОЛНОЕ ОПИСАНИЕ
	Файл Types.ps1xml в каталоге установки Windows PowerShell 
	($pshome) - это текстовый файл на основе XML, позволяющий 
	добавлять свойства и методы к объектам, использующимся в Windows 
	PowerShell. Windows PowerShell содержит встроенный файл 
	Types.ps1xml, добавляющий к типам .NET несколько элементов. Для 
	большего расширения типов можно создавать дополнительные файлы 
	Types.ps1xml.

	Например, по умолчанию объекты массивов (System.Array) имеют 
	свойство Length, которое указывает количество объектов в массиве. 
	Но так как название "length" (длина) описывает свойство 
	недостаточно четко, Windows PowerShell добавляет свойство-псевдони
	м под названием "Count" (количество), отображающее то же 
	значение. Следующий фрагмент XML добавляет к типу System.Array 
	свойство Count.

		<Type>
			<Name>System.Array</Name>
			<Members>
				<AliasProperty>
					<Name>Count</Name>
					<ReferencedMemberName>
						Length
					</ReferencedMemberName>
				</AliasProperty>
			</Members>
		</Type>

	Чтобы получить новое свойство AliasProperty, примените команду 
	Get-Member к любому массиву, как показано в следующем примере.

		Get-Member -inputobject (1,2,3,4)


	Эта команда возвращает следующий результат.

		Name		 MemberType	Definition
		----		 ----------	----------
		Count		AliasProperty Count = Length
		Address		Method		System.Object& Address(Int32 )
		Clone		Method		System.Object Clone()
		CopyTo		 Method		System.Void CopyTo(Array array, Int32 index):
		Equals		 Method		System.Boolean Equals(Object obj)
		Get			Method		System.Object Get(Int32 )
		...

	В результате в Windows PowerShell можно использовать свойство 
	массивов Count или свойство Length. Пример:

		C:\PS> (1, 2, 3, 4).count
		4

		C:\PS> (1, 2, 3, 4).length
		4
 

  Создание новых файлов Types.ps1xml

	Файлы PS1XML, устанавливаемые вместе с Windows PowerShell, 
	имеют цифровую подпись, защищающую их от искажения, поскольку 
	форматирование может включать блоки скриптов. Поэтому, чтобы 
	добавить к типу .NET Framework свойство или метод, создавайте 
	собственные файлы Types.ps1xml и добавляйте их в консоль 
	Windows PowerShell.

	Для создания нового файла сначала скопируйте имеющийся файл 
	Types.ps1xml. Новый файл может иметь любое имя, но он должен 
	иметь расширение PS1XML. Новый файл можно поместить в любой 
	каталог, доступный оболочке Windows PowerShell, однако 
	рекомендуется помещать его в каталог установки Windows 
	PowerShell ($pshome) или в подкаталог каталога установки.

	После сохранения добавьте новый файл с помощью командлета 
	Update-TypeData в консоль Windows PowerShell. Если новые типы 
	должны иметь приоритет перед типами, определенными во 
	встроенном файле, следует использовать параметр PrependData 
	командлета Update-TypeData. Действие командлета Update-TypeData 
	распространяется только на текущую консоль. Чтобы изменение 
	распространялось на все будущие консоли, экспортируйте консоль 
	или добавьте команду Update-TypeData в профиль Windows PowerShell.


  Types.ps1xml и командлет Add-Member

	Файлы Types.ps1xml добавляют свойства и методы ко всем 
	экземплярам объектов указанного типа .NET Framework в 
	задействованной консоли Windows PowerShell. Если же нужно 
	добавить свойства или методы только к одному экземпляру 
	объекта, используйте командлет Add-Member.

	Дополнительные сведения см. в разделе Add-Member.


  Пример: добавление члена возраста в объекты FileInfo

	В данном примере показано, как добавить свойство Age к объектам 
	файлов (System.IO.FileInfo). Возраст файла - это разница в днях 
	между временем его создания и текущим временем.

	В качестве шаблона для нового файла проще всего использовать 
	первоначальный файл Types.ps1xml. Следующая команда копирует 
	первоначальный файл в файл MyTypes.ps1xml в каталоге $pshome.

		copy-item Types.ps1xml MyTypes.ps1xml


	Затем откройте файл Types.ps1xml в любом редакторе XML или 
	текста, например в Блокноте. Так как свойство Age 
	рассчитывается с помощью блока скрипта, найдите тег 
	<ScriptProperty>, который будет использоваться как модель для 
	нового свойства Age. 

	Для создания свойства скрипта скопируйте XML между тегами кода 
	<Type> и </Type>. Затем удалите оставшуюся часть файла, кроме 
	открывающих тегов <?xml> и <Types> и закрывающего тега 
	</Types>. Чтобы предотвратить возникновение ошибок, нужно 
	удалить и цифровую подпись.

	Начните со свойства скрипта-модели, такого как следующее 
	свойство скрипта, скопированное из первоначального файла 
	Types.ps1xml.

		<?xml version="1.0" encoding="utf-8" ?>
		<Types>
			<Type>
				 <Name>System.Guid</Name>
					<Members>
						<ScriptProperty>
							<Name>Guid</Name>
							<GetScriptBlock>$this.ToString()</GetScriptBlock>
						</ScriptProperty>
					</Members>
			</Type>
		</Types>


	Затем измените имя типа .NET Framework, имя свойства и значение 
	блока скрипта, создав свойство Age для объектов файлов.


		<?xml version="1.0" encoding="utf-8" ?>
		<Types>
			<Type>
				 <Name>System.IO.FileInfo</Name>
					<Members>
						<ScriptProperty>
							<Name>Age</Name>
							<GetScriptBlock>
							 ((get-date) - ($this.creationtime)).days
							</GetScriptBlock>
						</ScriptProperty>
					</Members>
			</Type>
		</Types>


	Сохранив и закрыв файл, добавьте новый файл Types.ps1xml в 
	текущую консоль с помощью команды Update-TypeData, такой как 
	приведенная ниже. В этой команде используется параметр 
	PrependData, чтобы задать для нового файла более высокий 
	приоритет по сравнению с исходным файлом. (Дополнительные 
	сведения о командлете Update-TypeData см. в разделе 
	Update-TypeData.)

		update-typedata -prependpath $pshome\MyTypes.ps1xml

	Для проверки изменений используйте команду Get-ChildItem, чтобы 
	вернуть файл PowerShell.exe в каталоге $pshome, а затем 
	передайте файл по конвейеру командлету Format-List, чтобы 
	получить список всех свойств файла. В результате изменений в 
	списке появилось свойство Age.

		get-childitem $pshome\powershell.exe | format-list -property *  


		PSPath			: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
		PSParentPath	: Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
		PSChildName	 : powershell.exe
		PSDrive		 : C
		PSProvider		: Microsoft.PowerShell.Core\FileSystem
		PSIsContainer	 : False
		Age			 : 16
		VersionInfo	 : File:			 C:\WINDOWS\system32\WindowsPow...
					InternalName:	 POWERSHELL
					OriginalFilename: PowerShell.EXE
		...


	Вывести свойство файла Age можно также с помощью следующей команды.

		(get-childitem $pshome\powershell.exe).age
		16
 

  XML в файлах Types.ps1xml

	Тег <Types> включает все типы, которые определены в файле.
	Должна быть только одна пара тегов <Types>.

	Каждый тип .NET Framework, отмеченный в файле, должен быть 
	представлен парой тегов <Type>. 

	Теги типов должны содержать следующие теги.

		<Name>: пара тегов <Name>, включающих имя задействованного 
				.типа .NET Framework.

		<Members>: пара тегов <Members>, включающих теги для 
					 новых свойств и методов, определяемых для типа 
					 .NET Framework.

	Любые следующие теги членов могут находиться внутри тегов <Members>.

	<AliasProperty>: определяет новое имя существующего свойства.

		 Тег <AliasProperty> должен иметь пару тегов <Name>, 
		 определяющих имя нового свойства, и пару тегов 
		 <ReferencedMemberName>, которые задают существующее свойство. 
		 Например, свойство-псевдоним Count - псевдоним свойства 
		 Length объектов массивов.

			 <Type>
				 <Name>System.Array</Name>
				 <Members>
					 <AliasProperty>
						 <Name>Count</Name>
						 <ReferencedMemberName>Length</ReferencedMembe
						 rName>
					 </AliasProperty>
				 </Members>
			 </Type>


	<CodeMethod>: ссылается на статический метод класса .NET Framework.

		 Тег <CodeMethod> должен иметь пару тегов <Name>, 
		 определяющих имя нового метода, и пару тегов <GetCodeReferenc
		 e>, указывающих код, в котором определен метод. 
		 Например, свойство каталогов (объектов System.IO.DirectoryInf
		 o) Mode - свойство кода, определенное в провайдере Windows 
		 PowerShell FileSystem.
	
			 <Type>
				 <Name>System.IO.DirectoryInfo</Name>
				 <Members>
					 <CodeProperty>
						<Name>Mode</Name>
						<GetCodeReference>
						 <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
						 <MethodName>Mode</MethodName>
						</GetCodeReference>
					 </CodeProperty>
				 </Members>
			 </Type>

 
	<CodeProperty>: ссылается на статический метод класса .NET 
	Framework.

		 Тег <CodeProperty> должен иметь пару тегов <Name>, 
		 определяющих имя нового свойства, и пару тегов 
		 <GetCodeReference>, указывающих код, в котором определено 
		 свойство. 

		 Например, свойство каталогов (объектов System.IO.DirectoryInf
		 o) Mode - свойство кода, определенное в провайдере Windows 
		 PowerShell FileSystem.

			 <Type>
				 <Name>System.IO.DirectoryInfo</Name>
				 <Members>
					 <CodeProperty>
						<Name>Mode</Name>
						<GetCodeReference>
						 <TypeName>Microsoft.PowerShell.Commands.FileSystemProvider</TypeName>
						 <MethodName>Mode</MethodName>
						</GetCodeReference>
					 </CodeProperty>
				 </Members>
			 </Type>


	<MemberSet>: определяет коллекцию членов (свойств и методов). 

		 Теги <MemberSet> содержатся внутри основных тегов <Members>. 
		 Они должны включать пару тегов <Name>, в которых находится 
		 имя набора членов, и пару вторичных тегов <Members>, в 
		 которых находятся члены (свойства и методы) этого набора. 
		 Членами набора могут быть любые теги, создающие свойства 
		 (например, <NoteProperty> или <ScriptProperty>), или методы 
		 (например, <Method> или <ScriptMethod>).

		 В файлах Types.ps1xml тег <MemberSet> используется, чтобы 
		 определить 
		 представления объектов .NET Framework в Windows PowerShell 
		 по умолчанию. В этом случае именем набора членов (значение в 
		 тегах <Name>) всегда является "PsStandardMembers", а имена 
		 свойств тега (значение <Name>) могут быть следующими.

			- DefaultDisplayProperty: одно свойство объекта.

			- DefaultDisplayPropertySet: одно или несколько свойств 
			объекта.

			- DefaultKeyPropertySet:одно или несколько ключевых 
			свойств объекта. Ключевое свойство определяет 
			экземпляры значений свойств, такие как идентификационные
			номера элементов в журнале сеанса.

		 Например, следующий фрагмент XML определяет вывод по 
		 умолчанию служб (объектов System.ServiceProcess.ServiceContro
		 ller), которые возвращает командлет Get-Service. Он 
		 определяет набор членов "PsStandardMembers", состоящий из 
		 следующего набора свойств по умолчанию: Status, Name и 
		 DisplayName.

			 <Type>
				<Name>System.ServiceProcess.ServiceController</Name>
				<Members>
				 <MemberSet>
					 <Name>PSStandardMembers</Name>
					 <Members>
						 <PropertySet>
							 <Name>DefaultDisplayPropertySet</Name>
							 <ReferencedProperties>
								<Name>Status</Name>
								<Name>Name</Name>
								<Name>DisplayName</Name>
							 </ReferencedProperties>
						 </PropertySet>
					 </Members>
				 </MemberSet>
				</Members>
			 </Type>


   
	<Method>: ссылается на собственный метод основного объекта. 

	<Methods>: коллекция методов объекта.

	<NoteProperty>: определяет свойство со статическим значением.

		 Тег <NoteProperty> должен иметь пару тегов <Name>, 
		 определяющих имя нового свойства и пару тегов <Value>, 
		 определяющих значение свойства.

		 Например, следующий фрагмент XML создает для каталогов (объектов 
		 System.IO.DirectoryInfo) свойство Status. Свойство Status всегда 
		 имеет значение "Success".

			 <Type>
				 <Name>System.IO.DirectoryInfo</Name>
				 <Members>
					 <NoteProperty>
						<Name>Status</Name>
						<Value>Success</Value>
					 </NoteProperty>
				 </Members>
			 </Type>


	<ParameterizedProperty>: свойства, принимающие аргументы и 
							 возвращающие значение.

	<Properties>: коллекция свойств объекта.

	<Property>: свойство базового объекта.

	<PropertySet>: определяет коллекцию свойств объекта.

		 Тег <PropertySet> должен иметь пару тегов <Name>, 
		 определяющих имя набора свойств, и пару тегов <ReferencedProp
		 erty>, определяющих свойства. Имена свойств заключены в пары 
		 тегов <Name>.
 
		 В файле Types.ps1xml с помощью тегов <PropertySet> 
		 определяется набор свойств для отображения объекта по 
		 умолчанию. Отображение по умолчанию можно определить значением 
		 "PsStandardMembers" в теге <Name> тега <MemberSet>.

		 Например, следующий фрагмент XML создает для каталогов (объектов 
		 System.IO.DirectoryInfo) свойство Status. Свойство Status всегда 
		 имеет значение "Success".

			 <Type>
				 <Name>System.ServiceProcess.ServiceController</Name>
				 <Members>
					 <MemberSet>
						 <Name>PSStandardMembers</Name>
						 <Members>
							 <PropertySet>
								 <Name>DefaultDisplayPropertySet</Name>
								 <ReferencedProperties>
									 <Name>Status</Name
									 <Name>Name</Name>
									 <Name>DisplayName</Name>
								 </ReferencedProperties>
							 </PropertySet>
						 <Members>
					 <MemberSet>
				 <Members>
			 <Type>


	 <ScriptMethod>: определяет метод, значением которого является 
					 результат выполнения скрипта.

		 Тег <ScriptMethod> должен иметь пару тегов <Name>, 
		 определяющих имя нового метода и пару тегов <Script>, 
		 включающих блок скрипта, который возвращает результат метода. 

		 Например, методы ConvertToDateTime и ConvertFromDateTime 
		 управляющих объектов (System.System.Management.ManagementObje
		 ct) - это методы- скрипты, использующие статические методы 
		 ToDateTime и ToDmtfDateTime класса 
		 System.Management.ManagementDateTimeConverter. 

			 <Type>
				 <Name>System.Management.ManagementObject</Name>
				 <Members>
					 <ScriptMethod>
						 <Name>ConvertToDateTime</Name>
						 <Script>
							 [System.Management.ManagementDateTimeConverter]::ToDateTime($args[0])
						 </Script>
					 </ScriptMethod>
					 <ScriptMethod>
						 <Name>ConvertFromDateTime</Name>
						 <Script>
							 [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
						 </Script>
					 </ScriptMethod>
				 </Members>
			 </Type>


	<ScriptProperty>: определяет свойство, значением которого 
						является результат выполнения скрипта.

		 Тег <ScriptProperty> должен иметь пару тегов <Name>, 
		 определяющих имя нового свойства, и пару тегов 
		 <GetScriptBlock>, включающих блок скрипта, возвращающий 
		 значение свойства.
		 Например, свойство файлов (объектов System.IO.FileInfo) 
		 VersionInfo - это свойство скрипта, которое получается в 
		 результате использования свойства FullName статического 
		 метода GetVersionInfo объектов System.Diagnostics.FileVersion
		 Info.

			 <Type>
				<Name>System.IO.FileInfo</Name>
				<Members>
					<ScriptProperty>
					 <Name>VersionInfo</Name>
					 <GetScriptBlock>
						 [System.Diagnostics.FileVersionInfo]::GetVersionInfo($this.FullName)
					 </GetScriptBlock>
					</ScriptProperty>   
				</Members>
			 </Type>


	Дополнительные сведения см. в пакете средств разработки 
	программного обеспечения (SDK) Windows PowerShell в библиотеке 
	MSDN (Microsoft Developer Network) по адресу 
	http://go.microsoft.com/fwlink/?LinkId=144538.


  Update-TypeData

	Для загрузки файлов Types.ps1xml в консоль Windows PowerShell 
	используется командлет Update-TypeData. Если типы в этом файле 
	должны иметь приоритет перед типами во встроенном файле 
	Types	 .ps1xml, следует использовать параметр PrependData 
	командлета Update-TypeData. Действие командлета Update-TypeData 
	распространяется только на текущую консоль. Чтобы изменение 
	распространялось на все будущие консоли, экспортируйте консоль 
	или добавьте команду Update-TypeData в профиль Windows PowerShell.


  Подпись файлов Types.ps1xml

	Для защиты пользователей файла Types.ps1xml его можно подписать 
	с помощью цифровой подписи. Дополнительные сведения см. в 
	разделе about_Signing.
	

СМ. ТАКЖЕ
	about_Signing
	Copy-Item
	Get-Member
	Update-TypeData