PowerShell输入框变量传入Get-WmiObject脚本执行失败求助
问题分析与修正方案
你的修改脚本执行失败是因为Where-Object语句存在语法错误,同时未保留原脚本的模糊匹配逻辑,以下是具体修正:
错误点说明
修改后的第3行代码Where-Object {$_.Name -like [$pname')}有两处核心问题:
- 错误使用方括号
[包裹变量,PowerShell中字符串匹配需用引号界定; - 引号与括号不匹配,语法结构混乱;
- 丢失了原脚本的通配符
*,无法实现包含式模糊匹配。
修正后的脚本
Add-Type -AssemblyName Microsoft.VisualBasic $pname = [Microsoft.VisualBasic.Interaction]::InputBox('Program Name:') Get-WmiObject -Class Win32_Product | Select-Object -Property Name | Where-Object {$_.Name -like "*$pname*"} | Out-File -FilePath C:\programs.txt C:\programs.txt
优化建议(可选)
Get-WmiObject已被PowerShell官方弃用,推荐使用性能更优的Get-CimInstance,避免触发不必要的MSI安装包验证:
Add-Type -AssemblyName Microsoft.VisualBasic $pname = [Microsoft.VisualBasic.Interaction]::InputBox('Program Name:') Get-CimInstance -ClassName Win32_Product | Select-Object -Property Name | Where-Object {$_.Name -like "*$pname*"} | Out-File -FilePath C:\programs.txt C:\programs.txt
内容的提问来源于stack exchange,提问作者Gocha
相关产品推荐
相关产品推荐

