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 的产品 GUID?我希望这是对你所问内容的正确理解。如果您需要从代码中自动获取产品 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
}
}
为了在远程 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,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.
这里是关于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
}
}