Professional Documents
Culture Documents
about_Types.ps1xml
SHORT DESCRIPTION
Explains how the Types.ps1xml files let you extend the Microsoft .NET
Framework types of the objects that are used in Windows PowerShell.
LONG DESCRIPTION
The Types.ps1xml file in the Windows PowerShell installation directory
($pshome) is an XML-based text file that lets you add properties and
methods to the objects that are used in Windows PowerShell. Windows
PowerShell has a built-in Types.ps1xml file that adds several elements
to the .NET Framework types, but you can create additional Types.ps1xml
files to further extend the types.
For example, by default, array objects (System.Array) have a Length
property that lists the number of objects in the array. However, because
the name "length" does not clearly describe the property, Windows
PowerShell adds an alias property named "Count" that displays the same
value. The following XML adds the Count property to the System.Array type.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
To get the new AliasProperty, use a Get-Member command on any array, as show
n
in the following example.
Get-Member -inputobject (1,2,3,4)
The command returns the following results.
Name
---Count
Address
Clone
CopyTo
MemberType
---------AliasProperty
Method
Method
Method
Definition
---------Count = Length
System.Object& Address(Int32 )
System.Object Clone()
System.Void CopyTo(Array array, Int32 index
Equals
Get
...
Method
Method
):
As a result, you can use either the Count property or the Length property
of arrays in Windows PowerShell. For example:
C:\PS> (1, 2, 3, 4).count
4
Begin with the model script property, such as the following script
property, which was copied from the original Types.ps1xml file.
<?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>
Then, change the name of the .NET Framework type, the name of the
property, and the value of the script block to create an Age property
for file objects.
<?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>
After you save the file and close it, use an Update-TypeData command,
such as the following command, to add the new Types.ps1xml file to the
current console. The command uses the PrependData parameter to place the
new file in a higher precedence order than the original file. (For more
information about Update-TypeData, see Update-TypeData.)
update-typedata -prependpath $pshome\MyTypes.ps1xml
To test the change, use a Get-ChildItem command to get the
PowerShell.exe file in the $pshome directory, and then pipe the file to
the Format-List cmdlet to list all of the properties of the file. As a
result of the change, the Age property appears in the list.
get-childitem $pshome\powershell.exe | format-list -property *
PSPath
PSParentPath
PSChildName
PSDrive
PSProvider
:
:
:
:
:
Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
Microsoft.PowerShell.Core\FileSystem::C:\WINDOWS...
powershell.exe
C
Microsoft.PowerShell.Core\FileSystem
PSIsContainer
: False
Age
: 16
VersionInfo
: File:
C:\WINDOWS\system32\WindowsPow...
InternalName:
POWERSHELL
OriginalFilename: PowerShell.EXE
...
You can also display the Age property of the file by using the following
command.
(get-childitem $pshome\powershell.exe).age
16
The XML in Types.ps1xml Files
The <Types> tag encloses all of the types that are defined in the file.
There should be only one pair of <Types> tags.
Each .NET Framework type mentioned in the file should be represented by
a pair of <Type> tags.
The type tags must contain the following tags:
<Name>: A pair of <Name> tags that enclose the name of the affected
.NET Framework type.
<Members>: A pair of <Members> tags that enclose the tags for the
new properties and methods that are defined for the
.NET Framework type.
Any of the following member tags can be inside the <Members> tags.
<AliasProperty>: Defines a new name for an existing property.
The <AliasProperty> tag must have a pair of <Name> tags that specify
the name of the new property and a pair of <ReferencedMemberName> tags
that specify the existing property.
For example, the Count alias property is an alias for the Length
property of array objects.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
<CodeMethod>: References a static method of a .NET Framework class.
The <CodeMethod> tag must have a pair of <Name> tags that specify
the name of the new method and a pair of <GetCodeReference> tags
that specify the code in which the method is defined.
</Script>
</ScriptMethod>
<ScriptMethod>
<Name>ConvertFromDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::To
DmtfDateTime($args[0])
</Script>
</ScriptMethod>
</Members>
</Type>
<ScriptProperty>: Defines a property whose value is the output of a
script.
The <ScriptProperty> tag must have a pair of <Name> tags that specify
the name of the new property and a pair of <GetScriptBlock> tags
that enclose the script block that returns the property value.
For example, the VersionInfo property of files (System.IO.FileInfo
objects) is a script property that results from using the FullName
property of the GetVersionInfo static method of
System.Diagnostics.FileVersionInfo objects.
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>
<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo(
$this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
For more information, see the Windows PowerShell Software Development
Kit (SDK) in the MSDN (Microsoft Developer Network )library
at http://go.microsoft.com/fwlink/?LinkId=144538.
Update-TypeData
To load your Types.ps1xml files into a Windows PowerShell console, use
the Update-TypeData cmdlet. If you want the types in your file to take
precedence over types in the built-in Types.ps1xml file, use the
PrependData parameter of Update-TypeData. Update-TypeData affects only
the current console. To make the change to all future consoles, export
the console, or add the Update-TypeData command to your Windows
PowerShell profile.
Signing a Types.ps1xml File
To protect users of your Types.ps1xml file, you can sign the file using
a digital signature. For more information, see about_Signing.
SEE ALSO
about_Signing
Copy-Item
Get-Member
Update-TypeData