Question

documentation indique:

  

Ajoute un membre personnalisé défini par l'utilisateur   une instance de Windows PowerShell   objet.

Qu'est-ce que "l'objet Windows PowerShell" signifie?

Cela fonctionne bien:

$obj = new-object system.object
$obj | add-member -membertype noteproperty -name Name -value "OK"
$obj.name

Mais cela ne fait pas:

$obj = @{}

En fait, je suis en train d'ajouter la propriété à une erreur de $ [0].

Était-ce utile?

La solution

PowerShell a ce qu'on appelle un PSObject qui est un wrapper autour d'un objet .NET (ou il peut être un objet totalement personnalisé) et lorsque vous appelez Add-Member, PowerShell est enveloppait implicitement l'objet réel .NET avec un PSObject.

La façon dont Add-membre fonctionne dépend si oui ou non vous aider à démarrer avec un PSObject. Si vous ne l'avez pas commencé avec un PSObject, Add-Member enveloppera l'entrée dans un PSObject et vous aurez besoin de re-assigner la variable afin de voir l'objet adapté.

Ainsi, par exemple:

$x = [Environment]::OSVersion
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # does not show the new property

Ceci est parce que OSVersion n'est pas enveloppé est un PSObject. Add-membres ne l'envelopper, mais cet emballage est perdu parce que vous n'êtes pas réassigner x $ à l'objet enveloppé. Le contraste avec ce comportement:

$x = New-Object OperatingSystem ('Win32NT', '6.0')
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # DOES show the new property

En effet, New-Object enveloppe implicitement la nouvelle instance dans un PSObject. Donc, votre appel Add-membres est l'ajout de membres à l'enveloppe existante.

Pour en revenir au premier exemple, vous pouvez le faire fonctionner comme prévu en changeant à:

$x = [Environment]::OSVersion
$x = $x | Add-Member NoteProperty IsVista $true -PassThru
$x | Format-List   # DOES show the new property

Maintenant, après tout cela, la raison pour laquelle la Hashtable ne fonctionne pas la façon dont vous attendez est parce que Hashtables sont traités par PowerShell spéciale et essentiellement l'adaptateur pour Hashtables utilise les clés que les propriétés (un peu) et Add-membres ne travailler comme prévu avec ce genre d'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top