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