消息框 returns 字符串中的变量而不是值

Variable in messagebox returns string and not values

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

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

当我问

&$java 

它 returns 想要的值。 但是当把这个变量放在消息框中时:

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

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

消息框的格式是什么?

您使用 scriptblock 定义 $java(本质上是一个 lambda expression/anonymous 函数)。通过使用调用运算符 (&),您 invoke/execute 脚本块并在 return 中获得其中定义的操作的结果。但是,通过将变量放入字符串中,您可以将脚本块的字符串表示形式(本质上是它的定义)插入到字符串中。

您可能应该简单地删除大括号,以便立即执行 Get-ItemProperty 并将结果分配给变量 $java:

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