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. System.Array Count Length 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 da utilizzare come modello per la proprietà Age. Copiare il codice XML compreso tra i tag e per creare la proprietà script. Quindi, eliminare la parte restante del file, tranne i tag di apertura e e il tag di chiusura . È 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. System.Guid Guid $this.ToString() 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. System.IO.FileInfo Age ((get-date) - ($this.creationtime)).days 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 racchiude tutti i tipi definiti nel file. Deve essere presente una sola coppia di tag . Ogni tipo .NET Framework indicato nel file deve essere rappresentato da una coppia di tag . I tag tipo devono contenere i tag seguenti: : una coppia di tag che racchiudono il nome del tipo .NET Framework interessato. : una coppia di tag che racchiudono i tag per le nuove proprietà e i metodi definiti per il tipo .NET Framework. All'interno dei tag può essere presente qualsiasi dei seguenti tag membro. : definisce un nuovo nome per una proprietà esistente. Il tag deve includere una coppia di tag che specifica il nome della nuova proprietà e una coppia di tag che specifica la proprietà esistente. Ad esempio, la proprietà alias Count è un alias per la proprietà Length degli oggetti matrice. System.Array Count Length : fa riferimento a un metodo statico di una classe .NET Framework. Il tag deve presentare una coppia di tag che specificano il nome del nuovo metodo e una coppia di tag 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. System.IO.DirectoryInfo Mode Microsoft.PowerShell.Commands. FileSystemProvider Mode : fa riferimento a un metodo statico di una classe .NET Framework. Il tag deve presentare una coppia di tag che specificano il nome della nuova proprietà e una coppia di tag 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. System.IO.DirectoryInfo Mode Microsoft.PowerShell.Commands. FileSystemProvider Mode : definisce una raccolta di membri (proprietà e metodi). I tag vengono riportati all'interno dei tag primari. Devono includere una coppia di tag che racchiudano il nome del set di membri e una coppi di tag secondari che racchiudano i membri (proprietà e metodi) nel set. Qualsiasi dei tag che creano una proprietà (ad esempio o ) o un metodo (ad esempio o ) possono essere membri del set. Nei file Types.ps1xml, il tag è 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 ) è sempre "PsStandardMembers" e il nomi del tag proprietà (il valore di ) 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. System.ServiceProcess.ServiceController PSStandardMembers DefaultDisplayPropertySet Status Name DisplayName : fa riferimento a un metodo nativo dell'oggetto sottostante. : raccolta dei metodi dell'oggetto. : definisce una proprietà con un valore statico. Il tag deve presentare una coppia di tag che specificano il nome della nuova proprietà e una coppia di tag 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". System.IO.DirectoryInfo Status Success : proprietà che accettano argomenti e restituiscono un valore. : raccolta delle proprietà dell'oggetto. : proprietà dell'oggetto di base. : definisce una raccolta delle proprietà dell'oggetto. Il tag deve includere una coppia di tag che specificano il nome del set di proprietà e una coppia di che specificano le proprietà. I nomi delle proprietà sono racchiusi nelle coppie di tag . In Types.ps1xml, i tag 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 di un tag . Ad esempio, il codice XML seguente crea una proprietà Status per le directory (oggetti System.IO.DirectoryInfo). Il valore della proprietà Status è sempre "Success". System.ServiceProcess.ServiceController PSStandardMembers DefaultDisplayPropertySet StatusName DisplayName : definisce un metodo il cui valore è l'output di uno script. Il tag deve includere una coppia di tag che specificano il nome del nuovo metodo e una coppia di tag ConvertFromDateTime : definisce una proprietà il cui valore è l'output di uno script. Il tag deve includere una coppia di tag che specificano il nome della nuova proprietà e una coppia di tag