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





Содержание