如何解决Powershell获取MSI文件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之间进行比较:
PowerShell 命令用于查找新MSI文件的GUID的确切命令是什么?
解决方法
如果我理解正确,那么您想查找当前未安装的MSI的产品GUID吗?我希望这是对您所要询问的正确理解。如果需要从代码自动获取产品GUID,请that is also possible。这里有一个full,standalone VBScript,您可以将MSI文件拖放到其中以检索产品代码。
您可以通过使用合适的查看器打开MSI来找到产品代码,例如,用于MSI软件包的Microsoft SDK工具 Orca
。如果已安装Visual Studio,请尝试在 Orca-x86_en-us.msi
下搜索 Program Files (x86)
-并进行安装。然后在开始菜单中找到Orca。您也可以右键单击MSI文件以使用Orca打开它们-只需选择: "Edit with Orca"
。然后,您可以在“属性”表中找到产品GUID。
以下是有关MSI查看器的主题的答案(有几种选择,但Orca总体上最好):How can I compare the content of two (or more) MSI files?
有一个用于MSI的Powershell模块: https://github.com/heaths/psmsi
链接:
,我在远程VM和我的PC的“ 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
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。