ARGOMENTO
    about_Types.ps1xml

DESCRIZIONE BREVE
    Illustra la modalità in cui i file Types.ps1xml consentono di 
    estendere i tipi Microsoft .NET Framework degli oggetti 
    utilizzati in Windows PowerShell. 

DESCRIZIONE DETTAGLIATA
    Il file Types.ps1xml della directory di installazione ($pshome) 
    di Windows PowerShell è un file di testo basato su XML che 
    consente di aggiungere proprietà e metodi agli oggetti utilizzati 
    in Windows PowerShell. Windows PowerShell dispone di un file 
    Types.ps1xml predefinito che aggiunge diversi elementi ai tipi 
    .NET Framework. È tuttavia possibile creare file Types.ps1xml 
    aggiuntivi per estendere ulteriormente i tipi.

    Ad esempio, per impostazione predefinita, gli oggetti matrice 
    (System.Array) dispongono di una proprietà Length che elenca il 
    numero di oggetti nella matrice. Tuttavia, poiché il nome 
    "length" non descrive chiaramente la proprietà, viene aggiunta 
    una proprietà alias denominata "Count" che visualizza lo stesso 
    valore. Il codice XML seguente aggiunte la proprietà Count al 
    tipo System.Array.

        <Type>
            <Name>System.Array</Name>
            <Members>
                <AliasProperty>
                    <Name>Count</Name>
                    <ReferencedMemberName>
                        Length
                    </ReferencedMemberName>
                </AliasProperty>
            </Members>
        </Type>

    Per ottenere il nuovo oggetto AliasProperty, utilizzare un 
    comando Get-Member su qualsiasi matrice, come mostrato 
    nell'esempio seguente.

        Get-Member -inputobject (1,2,3,4)


    Il comando restituisce i risultati seguenti.

	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 )
	...

    Di conseguenza, è possibile utilizzare la proprietà Count o la 
    proprietà Length delle matrici in Windows PowerShell. Ad esempio:

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

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

  Creazione di nuovi file Types.ps1xml

      I file .ps1xml installati con Windows PowerShell sono firmati 
      digitalmente per impedirne l'alterazione poiché la 
      formattazione può includere blocchi di script. Pertanto, per 
      aggiungere una proprietà o un metodo a un tipo .NET Framework, 
      creare file Types.ps1xml, quindi aggiungerli alla console di 
      Windows PowerShell.

      Per creare un nuovo file, iniziare copiando un file 
      Types.ps1xml esistente. Il nuovo file può avere qualsiasi nome 
      ma deve avere estensione .ps1xml. È possibile inserire il nuovo 
      file in qualsiasi directory accessibile a Windows PowerShell, 
      ma è consigliabile inserirlo nella directory di installazione 
      ($pshome) di Windows PowerShell o in una sottodirectory della 
      directory di installazione.

      Dopo aver salvato il nuovo file, utilizzare il cmdlet 
      Update-TypeData per aggiungerlo alla console di Windows 
      PowerShell. Se si desidera che i tipi abbiano la precedenza sui 
      tipi definiti nel file predefinito, utilizzare il parametro 
      PrependData del cmdlet Update-TypeData. Update-TypeData ha 
      effetto solo sulla console corrente. Per apportare la modifica 
      a tutte le console future, esportare la console o aggiungere il 
      comando Update-TypeData al profilo di Windows PowerShell.


  Types.ps1xml e Add-Member

      I file Types.ps1xml aggiungono proprietà e metodi a tutte le 
      istanze degli oggetti del tipo .NET Framework specificato nella 
      console di Windows PowerShell interessata. Tuttavia, se è 
      necessario aggiungere proprietà o metodi solo a un'istanza di 
      un oggetto, utilizzare il cmdlet Add-Member.

      Per ulteriori informazioni, vedere Add-Member.


  Esempio: aggiunta di un membro Age agli oggetti FileInfo

      In questo esempio viene illustrato come aggiungere una 
      proprietà Age agli oggetti file (System.IO.FileInfo). L'età di 
      un file è la differenza in giorni tra la data di creazione e la 
      data corrente.

      È più semplice utilizzare il file Types.ps1xml originale come 
      modello per il nuovo file. Il comando seguente copia il file 
      originale in un file denominato MyTypes.ps1xml della directory 
      $pshome.

          copy-item Types.ps1xml MyTypes.ps1xml


      Quindi, apre il file Types.ps1xml in un editor XML o di testo, 
      quale Blocco note. Poiché la proprietà Age è calcolata 
      utilizzando un blocco di script, trovare un tag <ScriptProperty>
       da utilizzare come modello per la proprietà Age. 

      Copiare il codice XML compreso tra i tag <Type> e </Type> per 
      creare la proprietà script. Quindi, eliminare la parte restante 
      del file, tranne i tag di apertura <?xml> e <Types> e il tag di 
      chiusura </Types>. È necessario eliminare anche la firma 
      digitale per evitare errori.

      Iniziare con la proprietà script modello, ad esempio la 
      proprietà script seguente, copiata dal file Types.ps1xml originale.

          <?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>


      Quindi, modificare il nome del tipo .NET Framework, il nome 
      della proprietà e il valore del blocco di script per creare una 
      proprietà Age per gli oggetti file.


          <?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>


      Dopo aver salvato e chiuso il file, utilizzare un comando 
      Update-TypeData, come il seguente, per aggiungere il nuovo file 
      Types.ps1xml alla console corrente. Il comando utilizza il 
      parametro PrependData per inserire il nuovo file in un ordine 
      di precedenza maggiore al file precedente. Per ulteriori 
      informazioni su Update-TypeData, vedere Update-TypeData.

          update-typedata -prependpath $pshome\MyTypes.ps1xml

      Per eseguire il test della modifica, utilizzare un comando 
      Get-ChildItem per ottenere il file PowerShell.exe della 
      directory $pshome, quindi reindirizzare il file al cmdlet 
      Format-List per elencare tutte le proprietà del file. Come 
      risultato della modifica, la proprietà Age viene visualizzata 
      nell'elenco.

        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 
        ...


      È anche possibile visualizzare la proprietà Age del file 
      tramite il comando seguente.

	  (get-childitem $pshome\powershell.exe).age
          16
 

  Codice XML nei file Types.ps1xml

      Il tag <Types> racchiude tutti i tipi definiti nel file.
      Deve essere presente una sola coppia di tag <Types>.

      Ogni tipo .NET Framework indicato nel file deve essere 
      rappresentato da una coppia di tag <Type>. 

      I tag tipo devono contenere i tag seguenti:

          <Name>: una coppia di tag <Name> che racchiudono il nome del tipo
                  .NET Framework interessato.

          <Members>: una coppia di tag <Members> che racchiudono i 
                     tag per le nuove proprietà e i metodi definiti  
                     per il tipo .NET Framework.

      All'interno dei tag <Members> può essere presente qualsiasi  
      dei seguenti tag membro.

      <AliasProperty>: definisce un nuovo nome per una proprietà 
                       esistente.

         Il tag <AliasProperty> deve includere una coppia di tag 
         <Name> che specifica il nome della nuova proprietà e una 
         coppia di tag <ReferencedMemberName> che specifica la 
         proprietà esistente.
         Ad esempio, la proprietà alias Count è un alias per la 
         proprietà Length degli oggetti matrice.

             <Type>
                 <Name>System.Array</Name>
                 <Members>
                     <AliasProperty>
                         <Name>Count</Name>
                         <ReferencedMemberName>Length</ReferencedMembe
                         rName>
                     </AliasProperty>
                 </Members>
             </Type>


      <CodeMethod>: fa riferimento a un metodo statico di una classe 
      .NET Framework.

         Il tag <CodeMethod> deve presentare una coppia di tag <Name> 
         che specificano il nome del nuovo metodo e una coppia di tag 
         <GetCodeReference> che specificano il codice in cui il 
         metodo è definito.
         Ad esempio, la proprietà Mode delle directory (oggetti 
         System.IO.DirectoryInfo) è una proprietà di codice definita 
         nel provider FileSystem di 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>: fa riferimento a un metodo statico di una 
      classe .NET Framework.

         Il tag <CodeProperty> deve presentare una coppia di tag 
         <Name> che specificano il nome della nuova proprietà e una 
         coppia di tag <GetCodeReference> che specificano il codice 
         in cui la proprietà è definita.
         Ad esempio, la proprietà Mode delle directory (oggetti 
         System.IO.DirectoryInfo) è una proprietà di codice definita 
         nel provider FileSystem di 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>: definisce una raccolta di membri (proprietà e metodi). 

         I tag <MemberSet> vengono riportati all'interno dei tag 
         <Members> primari. Devono includere una coppia di tag <Name> 
         che racchiudano il nome del set di membri e una coppi di tag 
         <Members> secondari che racchiudano i membri (proprietà e 
         metodi) nel set. Qualsiasi dei tag che creano una proprietà 
         (ad esempio <NoteProperty> o <ScriptProperty>) o un metodo 
         (ad esempio <Method> o <ScriptMethod>) possono essere membri 
         del set.

         Nei file Types.ps1xml, il tag <MemberSet> è utilizzato per 
         definire le visualizzazioni predefinite degli oggetti .NET  
         Framework in Windows PowerShell. In questo caso, il nome  
         del set di membri (il valore racchiuso tra i tag <Name>)  
         è sempre "PsStandardMembers" e il nomi del tag proprietà  
         (il valore di <Name>) sono uno dei seguenti:

	    - DefaultDisplayProperty: una singola proprietà di un oggetto.

            - DefaultDisplayPropertySet: una o più proprietà di un 
              oggetto.

            - DefaultKeyPropertySet: una o più proprietà chiave di un 
              oggetto. Una proprietà chiave identifica le istanze di 
              valori chiave, ad esempio il numero ID degli elementi 
              in una cronologia della sessione.

         Ad esempio, il codice XML seguente definisce la 
         visualizzazione predefinita dei servizi (oggetti 
         System.ServiceProcess.ServiceController) restituiti  
         dal cmdlet Get-Service. Definisce un set di membri 
         denominato "PsStandardMembers" costituito da un set  
         di proprietà predefinito con le proprietà Status, 
         Name e 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>: fa riferimento a un metodo nativo dell'oggetto 
                sottostante. 

      <Methods>: raccolta dei metodi dell'oggetto.

      <NoteProperty>: definisce una proprietà con un valore statico.

         Il tag <NoteProperty> deve presentare una coppia di tag 
         <Name> che specificano il nome della nuova proprietà e una 
         coppia di tag <Value> che specificano il valore della proprietà.
         Ad esempio, il codice XML seguente crea una proprietà Status 
         per le directory (oggetti System.IO.DirectoryInfo). Il 
         valore della proprietà Status è sempre "Success".

             <Type>
                 <Name>System.IO.DirectoryInfo</Name>
                 <Members>
                     <NoteProperty>
                        <Name>Status</Name>
	                <Value>Success</Value>
                     </NoteProperty>
                 </Members>
             </Type>


      <ParameterizedProperty>: proprietà che accettano argomenti e 
                               restituiscono un valore.

      <Properties>: raccolta delle proprietà dell'oggetto.

      <Property>: proprietà dell'oggetto di base.

      <PropertySet>: definisce una raccolta delle proprietà dell'oggetto.

         Il tag <PropertySet> deve includere una coppia di tag <Name> 
         che specificano il nome del set di proprietà e una coppia di 
         <ReferencedProperty> che specificano le proprietà. I nomi delle 
         proprietà sono racchiusi nelle coppie di tag <Name>. 
         In Types.ps1xml, i tag <PropertySet> sono utilizzati per 
         definire set di proprietà per la visualizzazione predefinita 
         di un oggetto. È possibile identificare le visualizzazioni 
         predefinite mediante il valore "PsStandardMembers" nel tag 
         <Name> di un tag <MemberSet>.
         Ad esempio, il codice XML seguente crea una proprietà Status 
         per le directory (oggetti System.IO.DirectoryInfo). Il 
         valore della proprietà Status è sempre "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>: definisce un metodo il cui valore è l'output di 
                     uno script.

         Il tag <ScriptMethod> deve includere una coppia di tag 
         <Name> che specificano il nome del nuovo metodo e una coppia 
         di tag <Script> che racchiudono il blocco di script che 
         restituisce il risultato del metodo.
         Ad esempio, i metodi ConvertToDateTime e ConvertFromDateTime 
         degli oggetti di gestione (System.System.Management.Managemen
         tObject) sono metodi di script che utilizzano i metodi 
         statici ToDateTime e ToDmtfDateTime della classe 
         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>: definisce una proprietà il cui valore è 
                        l'output di uno script.

         Il tag <ScriptProperty> deve includere una coppia di tag 
         <Name> che specificano il nome della nuova proprietà e una 
         coppia di tag <Script> che racchiudono il blocco di script 
         che restituisce il valore della proprietà.
         Ad esempio, la proprietà VersionInfo dei file (oggetti 
         System.IO.FileInfo) è una proprietà script risultante 
         dall'utilizzo della proprietà FullName del metodo statico 
         GetVersionInfo degli oggetti 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>


      Per ulteriori informazioni, vedere Windows PowerShell Software 
      Development Kit (SDK) in MSDN Library all'indirizzo 
      https://go.microsoft.com/fwlink/?LinkId=144538 (le informazioni 
      potrebbero essere in lingua inglese).


  Update-TypeData
    
      Per caricare i file Types.ps1xml in una console di Windows 
      PowerShell, utilizzare il cmdlet Update-TypeData. Se si 
      desidera che i tipi nel file abbiano la precedenza sui tipi nel 
      file Types.ps1xml predefinito, utilizzare il parametro 
      PrependData di Update-TypeData. Update-TypeData ha effetto solo 
      sulla console corrente. Per apportare la modifica a tutte le 
      console future, esportare la console o aggiungere il comando 
      Update-TypeData al profilo di Windows PowerShell.


  Firma di un file Types.ps1xml

      Per proteggere gli utenti del file Types.ps1xml, è possibile 
      firmare il file utilizzando una firma digitale. Per ulteriori 
      informazioni, vedere about_Signing.
    	

VEDERE ANCHE
    about_Signing
    Copy-Item
    Get-Member
    Update-TypeData





Argomenti della Guida