2016-05-13 12 views
0

ich die Anforderung in eine Variable für installierte (32bit) Java-Versionen setzen werde:Variable in messagebox liefert String und nicht Werte

$java={Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*| Select-Object DisplayName, DisplayVersion| Where-Object {$_.DisplayName -like "Java ? Up*"}} 

Wenn ich frage

&$java 

es gibt die gewünschten Werte . Aber wenn dieser Variable in einem Meldungsfeld setzen:

[System.Windows.Forms.MessageBox]::Show("Javaversion: $java","Softwareversion",0,[System.Windows.Forms.MessageBoxIcon]::Asterisk) 

es gibt den Inhalt der Variablen ({Get-Item...) und nicht die Java-Versionen.

Was ist das Format für das Meldungsfeld?

Antwort

0

Sie definieren $java mit einer scriptblock (im Wesentlichen eine Lambda-Ausdruck/anonyme Funktion). Durch Aufruf des Aufrufoperators (&) rufen Sie den Skriptblock auf/führen ihn aus und erhalten dafür das Ergebnis der darin definierten Operation (en). Wenn Sie die Variable jedoch in eine Zeichenfolge einfügen, fügen Sie die Zeichenfolgendarstellung des Skriptblocks (im Wesentlichen seine Definition) in die Zeichenfolge ein.

Sie sollten wahrscheinlich einfach die geschweiften Klammern entfernen, so dass Get-ItemProperty sofort ausgeführt und die Ergebnisse werden der Variablen $java zugeordnet:

$java = Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | 
     Select-Object DisplayName, DisplayVersion | 
     Where-Object {$_.DisplayName -like "Java ? Up*"}