messagebox中的变量返回字符串而不是值

时间:2016-05-13 09:06:22

标签: powershell variables registry messagebox

我将安装(32位)Java版本的请求放在一个变量中:

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

当我问

&$java 

它返回所需的值。 但是当把这个变量放在消息框中时:

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

它返回变量({Get-Item...)的内容,而不是Java版本。

消息框的格式是什么?

1 个答案:

答案 0 :(得分:0)

使用scriptblock(基本上是lambda表达式/匿名函数)定义$java。通过使用调用操作符(&),您可以调用/执行scriptblock,然后获取其中定义的操作的结果。但是,通过将变量放入字符串,您可以将scriptblock的字符串表示形式(基本上是其定义)插入到字符串中。

您可能只需删除大括号,以便立即执行Get-ItemProperty并将结果分配给变量$java

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