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