You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中获取ComObject的属性名称(MSI/MSP场景)

同时提取MSI/MSP文件的摘要属性名称和值

要同时拿到摘要属性的名称和对应值,你需要借助Windows Installer预定义的摘要属性索引与名称的对应关系,把数字索引转换成可读的属性名称。以下是修改后的PowerShell代码:

$directory = "xxxx";
# 修正原代码中变量名不一致的问题,用$directory替代$workDir
$msiPath = Get-ChildItem -Path $directory -Include "*.msi", "*.msp" -Recurse | ForEach-Object {$_.FullName};

$installer = New-Object -com WindowsInstaller.Installer;
$database = $installer.GetType().InvokeMember("OpenDatabase", "InvokeMethod", $null, $installer, @($msiPath, 0));
$summaryInfo = $database.GetType().InvokeMember("SummaryInformation", "GetProperty", $null, $database, $null);
$propertyCount = $summaryInfo.GetType().InvokeMember("PropertyCount", "GetProperty", $null, $summaryInfo, $null);

# 建立索引到摘要属性名称的映射
$summaryProperties = @{
    0 = "标题"
    1 = "主题"
    2 = "作者"
    3 = "关键字"
    4 = "注释"
    5 = "模板"
    6 = "最后保存者"
    7 = "修订号"
    8 = "创建时间/日期"
    9 = "最后保存时间/日期"
    10 = "页数"
    11 = "字数"
    12 = "字符数"
    13 = "安全"
    14 = "类别"
    15 = "格式"
    16 = "经理"
    17 = "公司"
    18 = "代码页"
    19 = "内容类型"
    20 = "内容状态"
    21 = "语言"
    22 = "字符数(带空格)"
}

# 循环遍历所有属性,输出名称、索引和值
for ($i = 0; $i -lt $propertyCount; $i++) {
    $propName = if ($summaryProperties.ContainsKey($i)) { $summaryProperties[$i] } else { "未知属性_$i" }
    $propValue = $summaryInfo.GetType().InvokeMember("Property", "GetProperty", $null, $summaryInfo, $i)
    Write-Host "[$i] $propName : $propValue"
}

关键修改说明:

  • 新增了$summaryProperties哈希表,把每个摘要属性的数字索引映射为中文名称,覆盖了所有标准Windows Installer摘要属性
  • 修正了原代码中$directory和$workDir变量名不一致的问题
  • 调整循环条件为$i -lt $propertyCount,避免因索引超出范围导致的报错(索引从0开始,到PropertyCount-1结束)
  • 对于未在映射表中的索引(极少数情况),会显示为未知属性_索引值,保证兼容性

内容的提问来源于stack exchange,提问作者Bbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:21:07