繁体   English   中英

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,那也是可以的 这里有一个完整的独立 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM