2017-08-02 33 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