![](/img/trans.png)
[英]PowerShell: Get the MSI product code out of a MSI file without installing?
[英]Powershell Get MSI file GUID
为了在远程 VM 中找到已安装的 MSI 文件GUID - 我在Invoke-Command
使用以下命令:
Get-WmiObject Win32_Product | Where-Object {$_.Name -eq "Application Name"}
此命令在其输出中显示一个标识符号。
我知道,我应该在此命令中再添加一件事,以便仅获取 GUID,但我不知道如何...
现在,我需要将此 GUID 与我为安装获得的新 MSI 文件的 GUID 进行比较。
这意味着:
如果新文件的 GUID 较旧 - 我什么都不做
如果新文件的 GUID 相等 - 我什么都不做
如果新文件的 GUID 较新 - 我将进行升级或卸载安装过程...
因此,为了比较已安装的 MSI 的 GUID 和新的 MSI 文件的 GUID:
查找新 MSI 文件的 GUID 的确切PowerShell命令是什么?
如果我理解正确,您想查找当前未安装的 MSI 的产品 GUID? 我希望这是对你所问的正确理解。 如果您需要从代码中自动获取产品 GUID,那也是可以的。 这里有一个完整的独立 VBScript ,您可以将 MSI 文件拖放到它上面以检索产品代码。
您可以通过使用合适的查看器打开 MSI 来找到产品代码 - 例如Orca
,用于 MSI 包的 Microsoft SDK 工具。 如果您安装了 Visual Studio,请尝试在Program Files (x86)
下搜索Orca-x86_en-us.msi
并安装它。 然后在开始菜单中找到 Orca。 您也可以右键单击 MSI 文件以使用 Orca 打开它们 - 只需选择: "Edit with Orca"
。 然后您可以在属性表中找到产品 GUID。
以下是有关 MSI 查看器主题的答案(有多种选择,但 Orca 总体上是最好的): 如何比较两个(或更多)MSI 文件的内容?
MSI 有一个 Powershell 模块: https : //github.com/heaths/psmsi
链接:
我在远程 VM 和我的电脑中的“C:\\Program Files\\WindowsPowerShell\\Modules”中安装了一个Carbon库,然后执行以下命令:
[string] $newMSIProductCode = (Get-CMsi -Path "C:\appName.msi").ProductVersion
[string] $newMSIProductCodeGUID = (Get-CMsi -Path "C:\appName.msi").ProductCode.Guid
$newMSIProductCode = $newMSIProductCode -replace '\.',''
Enter-PSSession -Computer $computer -Credential $credentials
Invoke-Command -Computer $computer -Credential $credentials -ScriptBlock {
[string] $installedMSIProductCode = (Get-CProgramInstallInfo -Name "app name").DisplayVersion
$installedMSIProductCodeGUID = (Get-CProgramInstallInfo -Name "app name").ProductCode.Guid
[long] $installedMSIProductCode = $installedMSIProductCode -replace '\.',''
if ($Using:$newMSIProductCodeGUID -gt $installedR10ServerBuildProductCode)
{
//TO-DO
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.