2017-08-02 50 views
0

在下面的脚本:变量扩展在PowerShell中凡对象cmdlet

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where {$_.DisplayName -like '*Visual*' } | Select-Object -ExpandProperty DisplayName 

$productName="Visual" 
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where {$_.DisplayName -like '*$productName*' } | Select-Object -ExpandProperty DisplayName 

第一个GET-ItemProperty返回正确的结果,第二个返回什么。

我试图用一个脚本块:

[ScriptBlock]$whereClause = [ScriptBlock]::Create("$_.DisplayName -like '*$productName*'") 

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | where $whereClause | Select-Object -ExpandProperty DisplayName 

但这个错误“术语“.DisplayName未被识别为cmdlet的名字......”

我试着各种其他变化,但我似乎无法得到它的工作,我不知道我错过了什么。我希望能够在Where-Object cmdlet中使用参数变量。我该怎么做呢?

回答

0

您正在尝试使用字符串插值字符串常量:

'*$productName*'是字符串常量。要在PowerShell中使用字符串插值,您需要使用双引号:

"*$productName*" 
+0

IMO更常见的措辞是'可变扩展' – LotPings

+0

谢谢。 Powershell伤了我的头。 – bornfromanegg