(注意:我在您提到的无人值守安装问题的检测 msi 参数上发布了此响应的变体。)
lessmsi是一个很棒的工具,如果您愿意使用 GUI 并进行一些手动调查,它肯定可以在这里工作。
您可以尝试以下命令:
lessmsi l -tProperty <msi_name>
...但上述内容不太可能拥有您正在寻找的一切。
从本质上保证您获得所有可能属性的一种方法是使用 MSI 文件实际执行安装、修复或卸载,并按照Jon Heese 的回答中提到的那样记录该过程。
如果您希望在日志文件中筛选的文本更少,您可以将日志设置设置为仅记录属性:
<msi_name> /lp! <msi_property_logfile>
或者
msiexec /lp! <msi_property_logfile> /i <msi_name>
我更喜欢通过“提取”绕过安装/删除/修复需要的方法。这种方法相对于lessmsi的优点是它不需要 3rd-party 实用程序(即lessmsi),并且不需要您搞乱任何安装。您确实需要有足够的磁盘空间来实际安装程序(为了安全起见,可能还需要一些额外的空间)。然后您可以执行以下操作:
msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
请注意,<absolute_path_to_extract_to>
可以指向一个不存在的目录(该命令将创建必要的目录,否则将失败)。
如果您出于某种原因讨厌安装 UI,则可以附加该/qr
选项,这将“减少”并可能消除 UI,而不会影响属性记录过程。但是请注意 - 如果您“低于”简化的 UI(即/qb
|/passive
或/qn
| /quiet
),您<msi_property_logfile>
可能会丢失一些属性。
以下命令可以有效地为某个目录中的每个 MSI 文件生成一个属性日志文件(使用DIR /B
而不是DIR /B/S
不递归子目录;RD
如果要保留提取的文件,请删除该命令):
cmd /C "FOR /F delims^=^| %G IN ('DIR /B/S "%DirToSearch%\*.msi"') DO msiexec /a "%G" /qr /lp! "%~nG_log.txt" TARGETDIR="%~dpnG_extract" && RD /S/Q "%~dpnG_extract""
如果您出于某种原因想在 PowerShell 中运行它,请改用以下命令:
cmd /C "FOR /F delims^=^| %G IN ('DIR /B/S ""%DirToSearch%\*.msi""') DO msiexec /a ""%G"" /qr /lp! ""%~nG_log.txt"" TARGETDIR=""%~dpnG_extract"" && RD /S/Q ""%~dpnG_extract"""
该过程完成后,您只需打开日志文件并注意以Property(S):
/开头的行,Property(C):
正如 Jon Heese 所提到的。
一般来说,可以为安装设置的参数/属性以全部大写形式记录;例如,ALLUSERS
可以设置ALLUSERS=1
为所有用户安装。