La siguiente secuencia de comandos de PowerShell demuestra el problema:
$hash = @{'a' = 1; 'b' = 2}
Write-Host $hash['a'] # => 1
Write-Host $hash.a # => 1
# Two ways of printing using quoted strings.
Write-Host "$($hash['a'])" # => 1
Write-Host "$($hash.a)" # => 1
# And the same two ways Expanding a single-quoted string.
$ExecutionContext.InvokeCommand.ExpandString('$($hash[''a''])') # => 1
$ExecutionContext.InvokeCommand.ExpandString('$($hash.a)') # => Oh no!
Exception calling "ExpandString" with "1" argument(s): "Object reference not set to an instance of an object."
At line:1 char:1
+ $ExecutionContext.InvokeCommand.ExpandString('$($hash.a)')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NullReferenceException
Alguien sabe por qué la sintaxis $hash.key
funciona en todas partes, pero dentro de expansión explícito? ¿Se puede arreglar esto, o tengo que hacerlo funcionar y vivir con la sintaxis $hash[''key'']
?
En realidad es peor que eso - no puedo obtener * cualquier * subexpresión real expandida usando esta sintaxis, solo cosas simples como $ ($ foo) funcionan, por ejemplo '$ (Get-Date | select -expand DayOfWeek)' levantará la misma excepción. Sugerir informar sobre Connect, IMO que está rompiendo cambio/error. – BartekB
¿Cómo informar sobre dónde? No sé lo que significa 'conectar' en este contexto. –
Lo sentimos, debería ser más específico ...: http://connect.microsoft.com/powershell -> el mejor lugar para informar tales problemas. – BartekB