Está en la página 1de 9

TEMA

about_Types.ps1xml
DESCRIPCIN BREVE
Explica cmo los archivos Types.ps1xml permiten extender los
tipos de Microsoft .NET Framework de los objetos que se utilizan
en Windows PowerShell.
DESCRIPCIN DETALLADA
El archivo Types.ps1xml ubicado en el directorio de instalacin
de Windows PowerShell (pshome $) es un archivo de texto basado en
XML que permite agregar propiedades y mtodos a los objetos que
se utilizan en Windows PowerShell. Windows PowerShell tiene un
archivo Types.ps1xml integrado que agrega varios elementos a los
tipos de .NET Framework, pero se pueden crear archivos
Types.ps1xml adicionales para extender an ms los tipos.
Por ejemplo, de forma predeterminada, los objetos de matriz
(System.Array) tienen una propiedad Length que muestra el nmero
de objetos en la matriz. Sin embargo, como el nombre "length" no
describe claramente la propiedad, Windows PowerShell agrega una
propiedad de alias denominada "Count" que muestra el mismo valor.
El cdigo XML siguiente agrega la propiedad Count al tipo
System.Array.
<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>
Length
</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
Para obtener el nuevo miembro AliasProperty, utilice un comando
Get-Member en cualquier matriz, como se muestra en el ejemplo
siguiente.
Get-Member -inputobject (1,2,3,4)
El comando devuelve los resultados siguientes.
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

System.Boolean Equals(Object obj)


System.Object Get(Int32 )

):

Como consecuencia, se puede utilizar la propiedad Count o la


propiedad Length de matrices en Windows PowerShell. Por ejemplo:

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


4
C:\PS> (1, 2, 3, 4).length
4
Crear archivos Types.ps1xml
Los archivos .ps1xml que se instalan con Windows PowerShell
estn firmados digitalmente para evitar la alteracin porque el
formato puede incluir bloques de script. Por consiguiente, para
agregar una propiedad o un mtodo a un tipo de .NET Framework,
hay que crear archivos Types.ps1xml propios y, a continuacin,
agregarlos a la consola de Windows PowerShell.
Para crear un archivo, empiece copiando un archivo Types.ps1xml
existente. El nuevo archivo puede tener cualquier nombre pero
debe tener la extensin .ps1xml. Puede colocar el nuevo archivo
en cualquier directorio que sea accesible para Windows
PowerShell, pero es til colocar los archivos en el directorio
de instalacin de Windows PowerShell ($pshome) o en un
subdirectorio del directorio de instalacin.
Una vez guardado el nuevo archivo, utilice el cmdlet
Update-TypeData para agregarlo a la consola de Windows
PowerShell. Si desea que los tipos tengan prioridad sobre los
tipos definidos en el archivo integrado, utilice el parmetro
PrependData del cmdlet Update-TypeData. Update-TypeData afecta
solamente a la consola actual. Para realizar el cambio en todas
las consolas futuras, exporte la consola o agregue el comando
Update-TypeData al perfil de Windows PowerShell.
Types.ps1xml y Add-Member
Los archivos Types.ps1xml agregan propiedades y mtodos a todas
las instancias de los objetos del tipo de .NET Framework
especificado en la consola de Windows PowerShell afectada. Sin
embargo, si necesita agregar propiedades o mtodos slo a una
instancia de un objeto, utilice el cmdlet Add-Member.
Para obtener ms informacin, vea Add-Member.
Ejemplo: Agregar un miembro Age a objetos FileInfo
En este ejemplo se muestra la forma de agregar una propiedad
Age a objetos de archivo (System.IO.FileInfo). La antigedad de
un archivo es la diferencia entre la fecha de su creacin y la
fecha actual en das.
Es ms fcil utilizar el archivo Types.ps1xml original como
plantilla para el nuevo archivo. El comando siguiente copia el
archivo original en un archivo denominado MyTypes.ps1xml en el
directorio $pshome.
copy-item Types.ps1xml MyTypes.ps1xml

Seguidamente, abra el archivo Types.ps1xml en cualquier editor


de texto o XML, como el Bloc de notas. Como la propiedad Age se
calcula usando un bloque de script, busque una etiqueta
<ScriptProperty> para usarla como modelo para la nueva
propiedad Age.
Copie el contenido XML entre las etiquetas <Type> y </Type> del
cdigo para crear la propiedad de script. A continuacin,
elimine el resto del archivo, excepto las etiquetas de apertura
<?xml> y <Types> y la etiqueta de cierre </Types>. Tambin debe
eliminar la firma digital para evitar errores.
Empiece con la propiedad de script de modelo, como la propiedad
de script siguiente, que se copi del archivo Types.ps1xml original.
<?xml version="1.0" encoding="utf-8" ?>
<Types>
<Type>
<Name>System.Guid</Name>
<Members>
<ScriptProperty>
<Name>Guid</Name>
<GetScriptBlock>$this.ToString()</GetScrip
tBlock>
</ScriptProperty>
</Members>
</Type>
</Types>
A continuacin, cambie el nombre del tipo de .NET Framework, el
nombre de la propiedad y el valor del bloque de script para
crear una propiedad Age para objetos de archivo.
<?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>
Despus de guardar el archivo y cerrarlo, utilice un comando
Update-TypeData, como el comando siguiente, para agregar el
nuevo archivo Types.ps1xml a la consola actual. El comando
utiliza el parmetro PrependData para colocar el nuevo archivo
en un orden de prioridad ms alto que el del archivo original.
Para obtener ms informacin acerca de Update-TypeData, vea
Update-TypeData.
update-typedata -prependpath $pshome\MyTypes.ps1xml

Para probar el cambio, utilice un comando Get-ChildItem para


obtener el archivo PowerShell.exe en el directorio $pshome y, a
continuacin, canalice el archivo al cmdlet Format-List para
mostrar todas las propiedades del archivo. La consecuencia del
cambio es que la propiedad Age aparece en la lista.
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 ...
Tambin puede mostrar la propiedad Age del archivo utilizando
el comando siguiente.
(get-childitem $pshome\powershell.exe).age
16
El contenido XML en archivos Types.ps1xml
Las etiquetas <Type> incluyen todos los tipos que se definen en
el archivo.
Debe haber slo un par de etiquetas <Type>.
Cada tipo de .NET Framework mencionado en el archivo debe estar
representado por un par de etiquetas <Type>.
Las etiquetas de tipo deben contener las etiquetas siguientes:
<Name>: Un par de etiquetas <Name> que incluyen el nombre del
.tipo de .NET Framework afectado.
<Members>: Un par de etiquetas <Members> que incluyen las
etiquetas de
las nuevas propiedades y mtodos que se definen
para el tipo de .NET Framework.
Cualquiera de las etiquetas de miembro siguientes puede estar
dentro de las etiquetas <Members>.
<AliasProperty>: Define un nuevo nombre para una propiedad
existente.
La etiqueta <AliasProperty> debe tener un par de etiquetas
<Name> que especifican el nombre de la nueva propiedad y un
par de etiquetas <ReferencedMemberName> que especifican la
propiedad existente.
Por ejemplo, la propiedad de alias Count es un alias para la
propiedad Length de objetos de matriz.

<Type>
<Name>System.Array</Name>
<Members>
<AliasProperty>
<Name>Count</Name>
<ReferencedMemberName>Length</ReferencedMemberName>
</AliasProperty>
</Members>
</Type>
<CodeMethod>: Hace referencia a un mtodo esttico de una clase
de .NET Framework.
La etiqueta <CodeMethod> debe tener un par de etiquetas
<Name> que especifican el nombre del nuevo mtodo y un par
de etiquetas <GetCodeReference> que especifican el cdigo en
que se define el mtodo.
Por ejemplo, la propiedad Mode de directorios (objetos
System.IO.DirectoryInfo) es una propiedad de cdigo definida
en el proveedor FileSystem de Windows PowerShell.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<CodeProperty>
<Name>Mode</Name>
<GetCodeReference>
<TypeName>Microsoft.PowerShell.Commands.FileSystemPro
vider</TypeName>
<MethodName>Mode</MethodName>
</GetCodeReference>
</CodeProperty>
</Members>
</Type>
<CodeProperty>: Hace referencia a un mtodo esttico de una
clase de .NET Framework.
La etiqueta <CodeProperty> debe tener un par de etiquetas
<Name> que especifican el nombre de la nueva propiedad y un
par de etiquetas <GetCodeReference> que especifican el
cdigo en que se define la propiedad.
Por ejemplo, la propiedad Mode de directorios (objetos
System.IO.DirectoryInfo) es una propiedad de cdigo definida
en el proveedor FileSystem de Windows PowerShell.
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<CodeProperty>
<Name>Mode</Name>
<GetCodeReference>
<TypeName>Microsoft.PowerShell.Commands.FileSystemPro
vider</TypeName>
<MethodName>Mode</MethodName>
</GetCodeReference>
</CodeProperty>
</Members>

</Type>
<MemberSet>: Define una coleccin de miembros (propiedades y
mtodos).
Las etiquetas <MemberSet> aparecen dentro de las etiquetas
<Members> principales. Las etiquetas deben incluir un par de
etiquetas <Name> que incluyen el nombre del conjunto de
miembros y un par de etiquetas <Members> secundarias que
incluyen los miembros (propiedades y mtodos) del conjunto.
Cualquiera de las etiquetas que crean una propiedad (como
<NoteProperty> o <ScriptProperty>) o un mtodo (como
<Method> o <ScriptMethod>) pueden ser miembros del conjunto.
En los archivos Types.ps1xml, la etiqueta <MemberSet> se
utiliza para definir las
vistas predeterminadas de los objetos de .NET Framework en
Windows PowerShell. En este caso, el nombre del conjunto de
miembros (el valor incluido dentro de las etiquetas <Name>)
siempre es "PsStandardMembers" y los nombres de la etiqueta
de propiedades (el valor de <Name>) son uno de los siguientes:
- DefaultDisplayProperty: Una sola propiedad de un objeto.
- DefaultDisplayPropertySet: Una o ms propiedades de un
objeto.
- DefaultKeyPropertySet: Una o ms propiedades clave de
un objeto. Una propiedad clave identifica instancias de
valores de propiedad, como el nmero de identificacin
de elementos en el historial de una sesin.
Por ejemplo, el contenido XML siguiente define la
presentacin predeterminada de los servicios (objetos
System.ServiceProcess.ServiceController) devueltos por el cmdlet
Get-Service. Define un conjunto de miembros denominado "PsStandardMemb
ers" que consta de un conjunto de propiedades predeterminado con las
propiedades Status, Name y 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>: Hace referencia a un mtodo nativo del objeto subyacente.


<Methods>: Una coleccin de los mtodos del objeto.
<NoteProperty>: Define una propiedad con un valor esttico.
La etiqueta <NoteProperty> debe tener un par de etiquetas
<Name> que especifican el nombre de la nueva propiedad y un
par de etiquetas <Value> que especifican el valor de la
propiedad.
Por ejemplo, el contenido XML siguiente crea una propiedad
Status para directorios (objetos System.IO.DirectoryInfo).
El valor de la propiedad Status siempre es "Success".
<Type>
<Name>System.IO.DirectoryInfo</Name>
<Members>
<NoteProperty>
<Name>Status</Name>
<Value>Success</Value>
</NoteProperty>
</Members>
</Type>
<ParameterizedProperty>: Propiedades que toman los argumentos y
devuelven un valor.
<Properties>: Una coleccin de las propiedades del objeto.
<Property>: Una propiedad del objeto base.
<PropertySet>: Define una coleccin de propiedades del objeto.
La etiqueta <PropertySet> debe tener un par de etiquetas
<Name> que especifican el nombre del conjunto de propiedades
y un par de etiquetas <ReferencedProperty> que especifican
las propiedades. Los nombres de las propiedades se incluyen
en pares de etiquetas <Name>.
En Types.ps1xml, las etiquetas <PropertySet> se utilizan
para definir conjuntos de propiedades para la presentacin
predeterminada de un objeto. Se puede identificar la
presentacin predeterminada mediante el valor "PsStandardMemb
ers" en la etiqueta <Name> de una etiqueta <MemberSet>.
Por ejemplo, el contenido XML siguiente crea una propiedad
Status para directorios (objetos System.IO.DirectoryInfo).
El valor de la propiedad Status siempre es "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>: Define un mtodo cuyo valor es el resultado de
un script.
La etiqueta <ScriptMethod> debe tener un par de etiquetas
<Name> que especifican el nombre del nuevo mtodo y un par
de etiquetas <Script> que incluyen el bloque de script que
devuelve el resultado del mtodo.
Por ejemplo, los mtodos ConvertFromDateTime y
ConvertToDateTime de objetos de administracin
(System.System.Management.ManagementObject) son mtodos de script que
utilizan los mtodos estticos ToDmtfDateTime y ToDateTime de la clase
System.Management.ManagementDateTimeConverter.
<Type>
<Name>System.Management.ManagementObject</Name>
<Members>
<ScriptMethod>
<Name>ConvertToDateTime</Name>
<Script>
[System.Management.ManagementDateTimeConverter]::To
DateTime($args[0])
</Script>
</ScriptMethod>
<ScriptMethod>
<Name>ConvertFromDateTime</Name>
<Script>
[System.Management.
ManagementDateTimeConverter]::ToDmtfDateTime($args[0])
</Script>
</ScriptMethod>
</Members>
</Type>
<ScriptProperty>: Define una propiedad cuyo valor es el
resultado de un script.
La etiqueta <ScriptProperty> debe tener un par de etiquetas
<Name> que especifican el nombre de la nueva propiedad y un
par de etiquetas <GetScriptBlock> que incluyen el bloque de
script que devuelve el valor de la propiedad.
Por ejemplo, la propiedad VersionInfo de archivos (objetos
System.IO.FileInfo) es una propiedad de script que resulta
de utilizar la propiedad FullName del mtodo esttico
GetVersionInfo de objetos System.Diagnostics.FileVersionInfo.
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>VersionInfo</Name>

<GetScriptBlock>
[System.Diagnostics.FileVersionInfo]::GetVersionInfo(
$this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
Para obtener ms informacin, vea el Kit de desarrollo de
software de Windows PowerShell (SDK) en MSDN (Microsoft
Developer Network) Library, en http://go.microsoft.com/fwlink/?L
inkId=144538.
Update-TypeData
Para cargar los archivos Types.ps1xml en una consola de Windows
PowerShell, utilice el cmdlet Update-TypeData. Si desea que los
tipos de su archivo tengan prioridad sobre los tipos del
archivo Types.ps1xml integrado, utilice el parmetro
PrependData del cmdlet Update-TypeData. Update-TypeData afecta
solamente a la consola actual. Para realizar el cambio en todas
las consolas futuras, exporte la consola o agregue el comando
Update-TypeData al perfil de Windows PowerShell.
Firmar un archivo Types.ps1xml
Para proteger a los usuarios de su archivo Types.ps1xml, puede
firmar el archivo con una firma digital. Para obtener ms
informacin, vea about_Signing.
VEA TAMBIN
about_Signing
Copy-Item
Get-Member
Update-TypeData

También podría gustarte