PowerShell按设备厂商型号运行对应程序的脚本故障排查
PowerShell 厂商匹配脚本故障排查
故障根因
- 变量取值错误:
$Model = Get-CimInstance -ClassName Win32_ComputerSystem | select Manufacturer执行后,$Model是带Manufacturer属性的PowerShell自定义对象,不是厂商名称的纯字符串,后续所有-eq字符串判断永远不成立,因此不会触发任何程序启动逻辑。 - 逻辑分支缺失:脚本注释标注需要覆盖HP、联想、戴尔三个厂商,但实际判断逻辑仅编写了联想、戴尔两个分支,HP设备无对应执行逻辑。
- 匹配规则鲁棒性不足:不同机型、系统版本返回的
Manufacturer字段可能带前后空格、大小写不统一、带后缀(比如戴尔可能返回Dell Inc.、惠普老设备可能返回Hewlett-Packard),直接写全等字符串很容易匹配失败。
修正后脚本
所有原始命令、路径均保留,仅修复错误逻辑:
# Determine if HP, Lenovo, or Dell # 修正:直接取Manufacturer属性的字符串值,统一转大写、去除前后空格避免匹配异常 $Model = (Get-CimInstance -ClassName Win32_ComputerSystem).Manufacturer.Trim().ToUpper() # Depending on Model, run appropriate program If ($Model -eq 'LENOVO' ) { Start-Process "C:\Program Files (x86)\Lenovo\System Update\tvsu.exe" } ElseIf ($Model -like 'DELL*') { # 用通配符匹配兼容带后缀的戴尔返回值 Start-Process "C:\Drivers\OEM\Setup\TEM_FOLDER\DellCommandUpdate_450\setup.exe" } ElseIf ($Model -eq 'HP' -or $Model -eq 'HEWLETT-PACKARD') { # 补充HP分支,替换为实际HP专属程序路径即可 Start-Process "此处替换为HP专属程序的实际文件路径" }
验证建议
执行脚本前可以先单独运行Get-CimInstance -ClassName Win32_ComputerSystem | select Manufacturer,确认当前设备实际返回的厂商字段值,若和预设匹配字符串不一致直接调整判断规则即可。
内容的提问来源于stack exchange,提问作者gameandscripts
相关产品推荐
相关产品推荐

