< p >(
注意:我在您提到的
检测无人值守安装的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更具优势,因为它不需要第三方实用工具(即lessmsi),也不需要您干扰任何安装。您确实需要足够的磁盘空间来实际安装程序(并且可能需要一些额外的空间以确保安全)。然后您可以执行以下操作:
msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
请注意,
<absolute_path_to_extract_to>
可以指向不存在的目录(命令将创建必要的目录或失败)。
如果您因任何原因不喜欢安装界面,可以添加
/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"""
完成该进程后,只需打开日志文件并注意以Jon Heese提到的Property(S):
/Property(C):
开头的行。
一般而言,可为安装设置的参数/属性会记录在大写字母中,例如,ALLUSERS
可以设置为ALLUSERS=1
,以使安装适用于所有用户。