消息框 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*"}
我会将已安装(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*"}