Powershell 获取 MSI 文件 GUID

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 的产品 G​​UID?我希望这是对你所问内容的正确理解。如果您需要从代码中自动获取产品 GUID,that is also possible. There is a full, standalone VBScript 在这里您可以 drag-and-drop MSI 文件到其中以检索产品代码。

您可以通过使用 suitable 查看器打开 MSI 来查找产品代码 - 例如 Orca,用于 MSI 包的 Microsoft SDK 工具.如果您安装了 Visual Studio,请尝试搜索 Orca-x86_en-us.msi - 在 Program Files (x86) 下 - 然后安装它。然后在开始菜单中找到Orca。您也可以右键单击 MSI 文件以使用 Orca 打开它们 - 只需 select: "Edit with Orca"。然后您可以 在 属性 table.

中找到产品 GUID

这里是关于MSI观众话题的回答(有几个选择,但Orca总体来说是最好的):


有一个用于 MSI 的 Powershell 模块: https://github.com/heaths/psmsi


链接:

  • Finding the Product Code with Orca

我在远程虚拟机和我的电脑“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 
   }
}