Add-Member
Aggiunge un membro personalizzato definito dall'utente a un'istanza di un oggetto di Windows PowerShell.
Sintassi
Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]
Descrizione
Il cmdlet Add-Member aggiunge un membro personalizzato definito dall'utente a un'istanza di un oggetto di Windows PowerShell. Consente di aggiungere i seguenti tipi di membri: AliasProperty, CodeProperty, NoteProperty, ScriptProperty, PropertySet, CodeMethod, MemberSet e ScriptMethod. Per impostare il valore iniziale del membro, viene utilizzato il parametro Value. Nel caso di AliasProperty, ScriptProperty, CodeProperty e CodeMethod, è possibile specificare ulteriori informazioni utilizzando il parametro SecondValue.
I membri vengono aggiunti all'istanza specifica dell'oggetto reindirizzato a Add-Member o specificato tramite il parametro InputObject. Il membro aggiuntivo è disponibile solo finché l'istanza è disponibile. È possibile utilizzare il cmdlet Export-Clixml per salvare in un file l'istanza e i membri aggiuntivi. Le informazioni archiviate in tale file possono essere utilizzate dal cmdlet Import-Clixml per creare nuovamente l'istanza dell'oggetto.
Parametri
-Force
Aggiunge un nuovo membro anche se ne esiste già uno con lo stesso nome. Non funziona con i membri principali di un tipo.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-InputObject <psobject>
Specifica l'oggetto a cui verrà aggiunto il nuovo membro. Immettere una variabile contenente gli oggetti oppure digitare un comando o un'espressione che consente di ottenere gli oggetti.
Obbligatorio? |
true |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByValue) |
Accettare caratteri jolly? |
false |
-MemberType <PSMemberTypes>
Specifica il tipo del membro da aggiungere. Questo parametro è obbligatorio.
I valori validi per questo parametro sono:
-- AliasProperty: proprietà che definisce un nuovo nome per una proprietà esistente.
-- CodeMethod: metodo che fa riferimento a un metodo statico di una classe Microsoft .NET Framework.
-- CodeProperty: proprietà che fa riferimento a una proprietà statica di una classe .NET Framework.
-- MemberSet: raccolta predefinita di proprietà e metodi, quali PSBase, PSObject e PSTypeNames.
-- Method: metodo dell'oggetto .NET Framework sottostante.
-- NoteProperty: proprietà con un valore statico.
-- ParameterizedProperty: proprietà che accetta parametri e valori di parametro.
-- Property: proprietà dell'oggetto .NET Framework sottostante.
-- PropertySet: raccolta predefinita di proprietà dell'oggetto.
-- ScriptMethod: metodo il cui valore è l'output di uno script.
-- ScriptProperty: proprietà il cui valore è l'output di uno script.
-- All: ottiene tutti i tipi di membro.
-- Methods: ottiene tutti i tipi di metodo dell'oggetto (ad esempio method, codemethod, scriptmethod)
-- Properties: ottiene tutti i tipi di proprietà dell'oggetto (ad esempio property, codeproperty, aliasproperty, scriptproperty).
Non tutti gli oggetti dispongono di ogni tipo di membro. Se si specifica un tipo di membro di cui l'oggetto non dispone, Windows PowerShell restituisce un errore.
Il tipo di membro Event non è valido per Add-Member.
Obbligatorio? |
true |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
true |
-Name <string>
Specifica il nome del membro da aggiungere.
Se si omette il nome del parametro "Name", il valore del parametro -Name deve essere il secondo valore di parametro senza nome nel comando. Se si include il nome del parametro, i parametri possono essere riportati in qualsiasi ordine.
Obbligatorio? |
true |
Posizione? |
2 |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-PassThru
Passa l'oggetto appena esteso alla pipeline. Per impostazione predefinita, il cmdlet non genera alcun output.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-SecondValue <Object>
Specifica ulteriori informazioni facoltative sui membri AliasProperty, ScriptProperty, CodeProperty o CodeMethod. Se viene utilizzato quando si aggiunge un membro AliasProperty, questo parametro deve essere un tipo di dati. Al valore di AliasProperty verrà aggiunta una conversione (cast) nel tipo di dati specificato. Se ad esempio si aggiunge un membro AliasProperty che fornisce un nome alternativo per una proprietà di stringa, è inoltre possibile specificare un parametro SecondValue di System.Int32 per indicare che il valore di tale proprietà di stringa deve essere convertito in un valore integer quando per l'accesso viene utilizzato il membro AliasProperty corrispondente.
È possibile utilizzare il parametro SecondValue per specificare un membro ScriptBlock aggiuntivo quando si aggiunge un membro ScriptProperty. In tal caso, il primo membro ScriptBlock, specificato nel parametro Value, viene utilizzato per ottenere il valore di una variabile. Il secondo membro ScriptBlock, specificato nel parametro SecondValue, viene utilizzato per impostare il valore di una variabile.
Obbligatorio? |
false |
Posizione? |
4 |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Value <Object>
Specifica il valore iniziale del membro aggiunto. Se si aggiunge un membro AliasProperty, CodeProperty o CodeMethod, è possibile specificare ulteriori informazioni facoltative utilizzando il parametro SecondValue.
Obbligatorio? |
false |
Posizione? |
3 |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
<CommonParameters>
Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.
Input e output
Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.
Input |
System.Management.Automation.PSObject È possibile reindirizzare qualsiasi tipo di oggetto a Add-Member. |
Output |
Nessuno o System.Object Quando si utilizza il parametro PassThru, Add-Member restituisce l'oggetto appena esteso. Negli altri casi, il cmdlet non genera alcun output. |
Note
È possibile aggiungere membri solo a oggetti PSObject. Per determinare se un oggetto è un oggetto PSObject, utilizzare l'operatore "is". Per testare ad esempio un oggetto archiviato nella variabile $obj, digitare "$obj -is [PSObject]".
I nomi dei parametri MemberType, Name, Value e SecondValue sono facoltativi. Se si omettono i nomi dei parametri, i valori dei parametri senza nome devono essere riportati nell'ordine seguente: MemberType, Name, Value, SecondValue. Se si includono i nomi dei parametri, i parametri possono essere riportati in qualsiasi ordine.
Esempio 1
C:\PS>$a = (get-childitem)[0]
C:\PS> $a | add-member -membertype noteproperty -name Status -value done
C:\PS> $a | get-member -type noteproperty
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
PSChildName NoteProperty System.String PSChildName=Co
PSDrive NoteProperty System.Management.Automation
PSIsContainer NoteProperty System.Boolean PSIsContainer
PSParentPath NoteProperty System.String PSParentPath=M
PSPath NoteProperty System.String PSPath=Microso
PSProvider NoteProperty System.Management.Automation
Status NoteProperty System.String Status=done
Descrizione
-----------
Questi comandi aggiungono la proprietà di nota Status a un oggetto DirectoryInfo restituito da Get-ChildItem e assegnano a essa un valore "done".
Il primo comando ottiene il primo oggetto restituito da Get-Childitem (indice 0).
Il secondo comando aggiunge la proprietà di nota.
Il terzo comando utilizza un operatore pipeline (|) per inviare l'oggetto aggiornato al cmdlet Get-Member. L'output mostra che la proprietà è stata aggiunta.
Esempio 2
C:\PS>$a = (get-childitem)[0]
C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length
C:\PS> $a.filelength
Descrizione
-----------
Con questi comandi viene aggiunta la proprietà alias FileLength a un oggetto DirectoryInfo restituito da Get-ChildItem. La nuova proprietà è un alias della proprietà Length.
Il primo comando ottiene il primo oggetto restituito da Get-Childitem (indice 0).
Il secondo comando aggiunge la proprietà alias.
Il terzo comando restituisce il valore della nuova proprietà FileLength.
Esempio 3
C:\PS>$a = "a string"
C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru
C:\PS> $a.StringUse
Descrizione
-----------
Questi comandi aggiungono la proprietà StringUse a una stringa. Poiché la stringa non è un oggetto PSObject, è necessario includere il parametro PassThru nel comando per salvare la stringa estesa nella variabile. Con l'ultimo comando nell'esempio viene visualizzata la nuova proprietà.
Esempio 4
C:\PS>$a = "this is a string"
C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words `
-value {$this.split()} -passthru
C:\PS> $a.words()
Descrizione
-----------
Con questi comandi viene aggiunto un metodo script a un oggetto stringa. Il metodo script esporrà il metodo Split() della classe System.String della libreria di classi .NET Framework per agevolare la restituzione delle singole parole in una stringa mediante la chiamata a un metodo denominato "Words" nell'oggetto stringa. Si noti che per forzare Add-Member a restituire l'oggetto stringa esteso come output da archiviare nella variabile $a, viene utilizzato il parametro PassThru.
Esempio 5
C:\PS>$event = get-eventlog -logname system -newest 1
C:\PS> $event.TimeWritten | get-member
C:\PS> add-member -inputobject $event -membertype aliasproperty -name When `
-value TimeWritten -secondvalue System.String
C:\PS> $event.When | get-member
Descrizione
-----------
Tramite questi comandi una proprietà AliasProperty viene aggiunta a un oggetto EventLogEntry restituito dai cmdlet Get-EventLog. Il nome della proprietà AliasProperty è "When" e rappresenta un alias della proprietà TimeWritten dell'oggetto. Verrà quindi utilizzato il parametro SecondValue per specificare che il valore della proprietà deve essere convertito nel tipo System.String quando l'accesso viene effettuato tramite AliasProperty. La proprietà TimeWritten è un oggetto DateTime.
Nel primo comando viene utilizzato il cmdlet Get-EventLog per recuperare dal registro eventi di sistema l'evento più recente che viene quindi archiviato nella variabile $event.
Il secondo comando accede alla proprietà TimeWritten di tale evento e la reindirizza al cmdlet Get-Member per dimostrare che la proprietà è un tipo DateTime. Add-Member viene quindi utilizzato per aggiungere un membro AliasProperty all'istanza dell'oggetto EventLogEntry archiviato nella variabile $event. Vengono quindi utilizzati il parametro Name per impostare il nome del nuovo membro su "When" e il parametro Value per specificare che si tratta di un alias della proprietà 'TimeWritten'. Viene infine utilizzato il parametro SecondValue per indicare che, quando verrà utilizzato il nuovo membro, sarà necessario eseguire il cast del valore restituito dal relativo tipo System.DateTime originale in un tipo System.String.
Nel terzo del comando viene effettuato l'accesso al nuovo membro che viene reindirizzato al cmdlet Get-Member per confermare che il tipo del membro è System.String.
Esempio 6
C:\PS>function Copy-Property ($From, $To)
{
foreach ($p in Get-Member -InputObject $From -MemberType Property)
{
Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name
-Value $From.$($p.Name) -Force
$To.$($p.Name) = $From.$($p.Name)
}
}
Descrizione
-----------
Questa funzione copia tutte le proprietà di un oggetto in un altro oggetto.
Nel primo comando della funzione viene dichiarato il nome della funzione e ne vengono elencati i parametri.
Nel ciclo Foreach viene utilizzato il cmdlet Get-Member per ottenere ogni proprietà dell'oggetto From. I comandi nel ciclo Foreach vengono eseguiti in serie per ogni proprietà.
Con il comando Add-Member la proprietà dell'oggetto From viene aggiunta all'oggetto To come NoteProperty. Viene utilizzato il parametro Force per consentire al comando di aggiungere membri con lo stesso nome di membro.
L'ultimo comando della funzione fornisce alla nuova proprietà lo stesso nome della proprietà originale.