Das folgende Powershell-Skript veranschaulicht das Problem:
$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
Wer weiß, warum die $hash.key
Syntax überall, aber innerhalb expliziter Erweiterung funktioniert? Kann dies behoben werden, oder muss ich es saugen und mit der $hash[''key'']
Syntax leben?
Es ist eigentlich noch schlimmer als das - ich kann nicht get * any * tatsächlicher Teilausdruck mit dieser Syntax erweitert, funktionieren nur einfache Dinge wie $ ($ foo) '$ (Get-Date | select -expand DayOfWeek)' löst dieselbe Ausnahme aus. Schlagen Sie vor, es auf connect zu melden, IMO, das Änderung/Programmfehler bricht. – BartekB
Melde es wo? Ich weiß nicht, was "verbinden" in diesem Zusammenhang bedeutet. –
Entschuldigung, sollte spezifischer sein ...: http://connect.microsoft.com/powershell -> der beste Ort, um solche Probleme zu melden. – BartekB