Add-Member
Aggiunge proprietà e metodi personalizzati a un'istanza di un oggetto PowerShell.
Sintassi
TypeNameSet (Impostazione predefinita)
Add-Member
-InputObject <PSObject>
-TypeName <String>
[-PassThru]
[<CommonParameters>]
NotePropertyMultiMemberSet
Add-Member
[-NotePropertyMembers] <IDictionary>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
NotePropertySingleMemberSet
Add-Member
[-NotePropertyName] <String>
[-NotePropertyValue] <Object>
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
MemberSet
Add-Member
[-MemberType] <PSMemberTypes>
[-Name] <String>
[[-Value] <Object>]
[[-SecondValue] <Object>]
-InputObject <PSObject>
[-TypeName <String>]
[-Force]
[-PassThru]
[<CommonParameters>]
Descrizione
Il cmdlet Add-Member consente di aggiungere membri (proprietà e metodi) a un'istanza di un oggetto PowerShell. Ad esempio, è possibile aggiungere un membro NoteProperty che contiene una descrizione dell'oggetto o un membro ScriptMethod che esegue uno script per modificare l'oggetto.
Per usare Add-Member, inviare tramite pipe l'oggetto a Add-Memberoppure usare il parametro inputObject per specificare l'oggetto.
Il parametro MemberType indica il tipo di membro da aggiungere. Il parametro Name assegna un nome al nuovo membro e il parametro Value imposta il valore del membro.
Le proprietà e i metodi aggiunti vengono aggiunti solo all'istanza specifica dell'oggetto specificato.
Add-Member non modifica il tipo di oggetto. Per creare un nuovo tipo di oggetto, usare il cmdlet Add-Type.
È anche possibile usare il cmdlet Export-Clixml per salvare l'istanza dell'oggetto, inclusi i membri aggiuntivi, in un file. È quindi possibile utilizzare il Import-Clixml cmdlet per ricreare l'istanza dell'oggetto dalle informazioni archiviate nel file esportato.
A partire da Windows PowerShell 3.0, Add-Member include nuove funzionalità che semplificano l'aggiunta di proprietà note agli oggetti.
È possibile utilizzare i parametri NotePropertyName e NotePropertyValue per definire una proprietà note o usare il parametro NotePropertyMembers, che accetta una tabella hash di valori e nomi di proprietà note.
Inoltre, a partire da Windows PowerShell 3.0, il parametro PassThru, che genera un oggetto di output, è necessario meno frequentemente.
Add-Member ora aggiunge i nuovi membri direttamente all'oggetto di input di più tipi. Per altre informazioni, vedere la descrizione del parametro PassThru.
Esempio
Esempio 1: Aggiungere una proprietà note a un PSObject
Nell'esempio seguente viene aggiunta una proprietà Status note con il valore "Done" all'oggetto FileInfo che rappresenta il file di Test.txt.
Il primo comando usa il cmdlet Get-ChildItem per ottenere un oggetto FileInfo che rappresenta il file di Test.txt. Lo salva nella variabile $a.
Il secondo comando aggiunge la proprietà note all'oggetto in $a.
Il terzo comando usa la notazione punto per ottenere il valore della proprietà Status dell'oggetto in $a. Come illustrato nell'output, il valore è "Done".
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Esempio 2: Aggiungere una proprietà alias a un PSObject
Nell'esempio seguente viene aggiunta una proprietà alias Size all'oggetto che rappresenta il file Test.txt. La nuova proprietà è un alias per la proprietà Length.
Il primo comando usa il cmdlet Get-ChildItem per ottenere l'oggettoFileInfo Test.txt.
Il secondo comando aggiunge la proprietà alias Size. Il terzo comando usa la notazione punto per ottenere il valore della nuova proprietà Size.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Esempio 3: Aggiungere una proprietà StringUse note a una stringa
Questo esempio aggiunge la proprietà stringUse a una stringa.
Poiché Add-Member non è possibile aggiungere tipi agli oggetti di input String , è possibile specificare il parametro PassThru per generare un oggetto di output. L'ultimo comando nell'esempio visualizza la nuova proprietà.
In questo esempio viene usato il parametro NotePropertyMembers. Il valore del parametro NotePropertyMembers è una tabella hash. La chiave è il nome della proprietà della nota, StringUsee il valore è il valore della proprietà note, Display.
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Esempio 4: Aggiungere un metodo script a un oggetto FileInfo
In questo esempio viene aggiunto il metodo di script SizeInMB a un oggetto FileInfo , che calcola le dimensioni del file al MegaByte più vicino. Il secondo comando crea un ScriptBlock che usa il metodo statico Round dal tipo [math] per arrotondare le dimensioni del file alla seconda posizione decimale.
Il parametro Value usa anche la variabile automatica $This che rappresenta l'oggetto corrente. La variabile $This è valida solo nei blocchi di script che definiscono nuove proprietà e metodi.
L'ultimo comando usa la notazione punto per chiamare il nuovo metodo script SizeInMB sull'oggetto nella variabile $A.
$A = Get-ChildItem C:\Temp\test.txt
$S = {[math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()
0.43
Esempio 5: Copiare tutte le proprietà di un oggetto in un altro
Questa funzione copia tutte le proprietà di un oggetto in un altro oggetto.
Il foreach ciclo utilizza il Get-Member cmdlet per ottenere ognuna delle proprietà dell'oggetto From . I comandi all'interno del foreach ciclo vengono eseguiti in serie su ciascuna delle proprietà.
Il Add-Member comando aggiunge la proprietà dell'oggetto From all'oggetto To come NoteProperty. Il valore viene copiato utilizzando il parametro Value . Utilizza il parametro Force per aggiungere membri con lo stesso nome di membro.
function Copy-Property ($From, $To)
{
$properties = Get-Member -InputObject $From -MemberType Property
foreach ($p in $properties)
{
$To | Add-Member -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force
}
}
Esempio 6: Creare un oggetto personalizzato
In questo esempio viene creato un asset oggetto personalizzato.
Il New-Object cmdlet crea un oggetto PSObject. Nell'esempio viene salvato il $Asset nella variabile.
Il secondo comando utilizza l'acceleratore dei [ordered] tipi per creare un dizionario ordinato di nomi e valori. Il comando salva il risultato nella $D variabile.
Il terzo comando usa il parametro NotePropertyMembers del Add-Member cmdlet per aggiungere il $D dizionario nella variabile a PSObject.
La proprietà TypeName assegna un nuovo nome, Asset, a PSObject.
L'ultimo comando invia il nuovo oggetto Asset al Get-Member cmdlet. L'output mostra che l'oggetto ha un nome di tipo Asset e le proprietà della nota che abbiamo definito nel dizionario ordinato.
$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30";System="Server Core";PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member
TypeName: Asset
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Name NoteProperty System.String Name=Server30
PSVersion NoteProperty System.String PSVersion=4.0
System NoteProperty System.String System=Server Core
Parametri
-Force
Indica che questo cmdlet aggiunge un nuovo membro anche l'oggetto ha un membro personalizzato con lo stesso nome. Non è possibile utilizzare il parametro Force per sostituire un membro standard di un tipo.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
NotePropertyMultiMemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
NotePropertySingleMemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
MemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-InputObject
Specifica l'oggetto a cui viene aggiunto il nuovo membro. Immettere una variabile contenente gli oggetti oppure digitare un comando o un'espressione che ottiene gli oggetti .
Proprietà dei parametri
| Tipo: | PSObject |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | True |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-MemberType
Specifica il tipo del membro da aggiungere. Questo parametro è obbligatorio. I valori accettabili per questo parametro sono:
- NotaProprietà
- AliasProperty
- ScriptProperty
- CodeProperty
- ScriptMethod
- CodeMethod
Per informazioni su questi valori, vedere Enumerazione PSMemberTypes in MSDN Library.
Non tutti gli oggetti hanno ogni tipo di membro. Se si specifica un tipo di membro che l'oggetto non dispone, PowerShell restituisce un errore.
Proprietà dei parametri
| Tipo: | PSMemberTypes |
| Valore predefinito: | None |
| Valori accettati: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | TIPO |
Set di parametri
MemberSet
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Name
Specifica il nome del membro aggiunto da questo cmdlet.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
MemberSet
| Posizione: | 1 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-NotePropertyMembers
Specifica una tabella hash o un dizionario ordinato di nomi e valori di proprietà note. Digitare una tabella hash o un dizionario in cui le chiavi sono nomi di proprietà note e i valori sono valori delle proprietà note.
Per altre informazioni sulle tabelle hash e sui dizionari ordinati in PowerShell, vedere about_Hash_Tables.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Proprietà dei parametri
| Tipo: | IDictionary |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
NotePropertyMultiMemberSet
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-NotePropertyName
Specifica il nome della proprietà della nota.
Usare questo parametro con il parametro NotePropertyValue. Questo parametro è facoltativo.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
NotePropertySingleMemberSet
| Posizione: | 0 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-NotePropertyValue
Specifica il valore della proprietà note.
Usare questo parametro con il parametro NotePropertyName. Questo parametro è facoltativo.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Proprietà dei parametri
| Tipo: | Object |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
NotePropertySingleMemberSet
| Posizione: | 1 |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-PassThru
Restituisce un oggetto che rappresenta l'elemento con cui si sta lavorando. Per impostazione predefinita, questo cmdlet non genera alcun output.
Per la maggior parte degli oggetti, Add-Member aggiunge i nuovi membri all'oggetto di input.
Tuttavia, quando l'oggetto di input è una stringa, Add-Member non è possibile aggiungere il membro all'oggetto di input.
Per questi oggetti, utilizzare il parametro PassThru per creare un oggetto di output.
In Windows PowerShell 2.0 Add-Member aggiunti membri solo al PSObject wrapper di oggetti, non all'oggetto .
Utilizzare il parametro PassThru per creare un oggetto di output per qualsiasi oggetto con PSObject wrapper.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-SecondValue
Specifica informazioni aggiuntive facoltative sui membri AliasProperty, ScriptProperty, CodeProperty o CodeMethod .
Se usato quando si aggiunge un AliasProperty, questo parametro deve essere un tipo di dati. Viene aggiunta una conversione al tipo di dati specificato al valore dell'AliasProperty.
Ad esempio, se si aggiunge un oggetto AliasProperty che fornisce un nome alternativo per una proprietà stringa, è anche possibile specificare un parametro SecondValue di System.Int32 per indicare che il valore di tale proprietà stringa deve essere convertito in un numero intero quando vi si accede tramite l'oggetto AliasProperty corrispondente.
È possibile utilizzare il parametro SecondValue per specificare un oggetto ScriptBlock aggiuntivo quando si aggiunge un membro ScriptProperty . Il primo oggetto ScriptBlock, specificato nel parametro Value , viene utilizzato per ottenere il valore di una variabile. Il secondo oggetto ScriptBlock, specificato nel parametro SecondValue , viene utilizzato per impostare il valore di una variabile.
Proprietà dei parametri
| Tipo: | Object |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
MemberSet
| Posizione: | 3 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-TypeName
Specifica un nome per il tipo.
Quando il tipo è una classe nello spazio dei nomi system o in un tipo con un acceleratore di tipo, è possibile immettere il nome breve del tipo. In caso contrario, è necessario il nome completo del tipo. Questo parametro è efficace solo quando il InputObject è un PSObject.
Questo parametro è stato introdotto in Windows PowerShell 3.0.
Proprietà dei parametri
| Tipo: | String |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
TypeNameSet
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
NotePropertyMultiMemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
NotePropertySingleMemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
MemberSet
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Value
Specifica il valore iniziale del membro aggiunto. Se si aggiunge un membro AliasProperty, CodeProperty, ScriptProperty o CodeMethod , è possibile fornire informazioni aggiuntive facoltative utilizzando il parametro SecondValue .
Proprietà dei parametri
| Tipo: | Object |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
MemberSet
| Posizione: | 2 |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
PSObject
È possibile inviare tramite pipe qualsiasi tipo di oggetto a questo cmdlet.
Output
None or System.Object
Quando si utilizza il parametro PassThru , questo cmdlet restituisce l'oggetto appena esteso. In caso contrario, questo cmdlet non genera alcun output.
Note
È possibile aggiungere membri solo agli oggetti PSObject . Per determinare se un oggetto è un oggetto PSObject, utilizzare l'operatore -is.
Ad esempio, per testare un oggetto archiviato nella variabile $obj, digitare $obj -is [PSObject].
I nomi dei MemberType, Name, Valuee parametri secondValue sono facoltativi. Se si omettono i nomi dei parametri, i valori dei parametri senza nome devono essere visualizzati in questo ordine: MemberType, Name, Valuee SecondValue.
Se si includono i nomi dei parametri, i parametri possono essere visualizzati in qualsiasi ordine.
È possibile usare la variabile automatica $this nei blocchi di script che definiscono i valori di nuove proprietà e metodi.
La variabile $this fa riferimento all'istanza dell'oggetto a cui vengono aggiunte le proprietà e i metodi. Per altre informazioni sulla variabile $this, vedere about_Automatic_Variables.