TEMA
    about_Types.ps1xml

DESCRIPCIÓN BREVE
    Explica cómo los archivos Types.ps1xml permiten extender los 
    tipos de Microsoft .NET Framework de los objetos que se utilizan 
    en Windows PowerShell. 

DESCRIPCIÓN DETALLADA
    El archivo Types.ps1xml ubicado en el directorio de instalación 
    de Windows PowerShell (pshome $) es un archivo de texto basado en 
    XML que permite agregar propiedades y métodos 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 aún más los tipos.

    Por ejemplo, de forma predeterminada, los objetos de matriz 
    (System.Array) tienen una propiedad Length que muestra el número 
    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 código 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           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 )
	...

    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 
      están firmados digitalmente para evitar la alteración porque el 
      formato puede incluir bloques de script. Por consiguiente, para 
      agregar una propiedad o un método a un tipo de .NET Framework, 
      hay que crear archivos Types.ps1xml propios y, a continuación, 
      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 extensión .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 instalación de Windows PowerShell ($pshome) o en un 
      subdirectorio del directorio de instalación.

      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 parámetro 
      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 métodos 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 métodos sólo a una 
      instancia de un objeto, utilice el cmdlet Add-Member.

      Para obtener más información, 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 antigüedad de 
      un archivo es la diferencia entre la fecha de su creación y la 
      fecha actual en días.

      Es más fácil 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 
      código para crear la propiedad de script. A continuación, 
      elimine el resto del archivo, excepto las etiquetas de apertura 
      <?xml> y <Types> y la etiqueta de cierre </Types>. También 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 continuación, 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>


      Después 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 parámetro PrependData para colocar el nuevo archivo 
      en un orden de prioridad más alto que el del archivo original. 
      Para obtener más información 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 
      continuación, 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 ...


      También 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 sólo 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 métodos 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 método estático de una clase 
      de .NET Framework.

         La etiqueta <CodeMethod> debe tener un par de etiquetas 
         <Name> que especifican el nombre del nuevo método y un par 
         de etiquetas <GetCodeReference> que especifican el código en 
         que se define el método.
         Por ejemplo, la propiedad Mode de directorios (objetos 
         System.IO.DirectoryInfo) es una propiedad de código definida 
         en el proveedor FileSystem de Windows PowerShell.
        
             <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>: Hace referencia a un método estático 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 
         código en que se define la propiedad.
         Por ejemplo, la propiedad Mode de directorios (objetos 
         System.IO.DirectoryInfo) es una propiedad de código definida 
         en el proveedor FileSystem de Windows PowerShell.
             <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>: Define una colección de miembros (propiedades y 
      métodos). 

         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 métodos) del conjunto. 
         Cualquiera de las etiquetas que crean una propiedad (como 
         <NoteProperty> o <ScriptProperty>) o un método (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 más propiedades de un 
              objeto.

            - DefaultKeyPropertySet: Una o más propiedades clave de 
              un objeto. Una propiedad clave identifica instancias de 
              valores de propiedad, como el número de identificación 
              de elementos en el historial de una sesión.

         Por ejemplo, el contenido XML siguiente define la 
         presentación 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 método nativo del objeto subyacente. 

      <Methods>: Una colección de los métodos del objeto.

      <NoteProperty>: Define una propiedad con un valor estático.

         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 colección de las propiedades del objeto.

      <Property>: Una propiedad del objeto base.

      <PropertySet>: Define una colección 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 presentación 
         predeterminada de un objeto. Se puede identificar la 
         presentación 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 método cuyo valor es el resultado de 
     un script.

         La etiqueta <ScriptMethod> debe tener un par de etiquetas 
         <Name> que especifican el nombre del nuevo método y un par 
         de etiquetas <Script> que incluyen el bloque de script que 
         devuelve el resultado del método.
         Por ejemplo, los métodos ConvertFromDateTime y 
         ConvertToDateTime de objetos de administración 
         (System.System.Management.ManagementObject) son métodos de script que 
         utilizan los métodos estáticos ToDmtfDateTime y ToDateTime de la clase 
         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>: 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 método estático 
         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 más información, vea el Kit de desarrollo de 
      software de Windows PowerShell (SDK) en MSDN (Microsoft 
      Developer Network) Library, en https://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 parámetro 
      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 más 
      información, vea about_Signing.
    	

VEA TAMBIÉN
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData





Tabla de contenido