AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 907771
Accepted
mark
mark
Asked: 2018-04-16 15:12:55 +0800 CST2018-04-16 15:12:55 +0800 CST 2018-04-16 15:12:55 +0800 CST

如何使用 Azure 自动化 DSC 在客户端工作站上安装 SSMS?

  • 772

我找到了以下帖子 - https://blogs.msdn.microsoft.com/troy_aults_blog/2017/01/13/automating-installation-of-ssms-with-dsc/

太好了,我现在只需要知道 SSMS-Setup-ENU.exe 的产品 ID,对吗?

但是,在地球上,我应该怎么做呢?当我将它安装在另一台机器上并尝试https://blogs.msdn.microsoft.com/brian_farnhill/2017/07/04/getting-ids-to-use-with-the-package-dsc-resource中描述的方法时/我有两个产品 ID:

PS C:\> $x86Path = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
PS C:\> $installedItemsX86 = Get-ItemProperty -Path $x86Path | Select-Object -Property DisplayName, PSChildName
PS C:\> $x64Path = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
PS C:\> $installedItemsX64 = Get-ItemProperty -Path $x64Path | Select-Object -Property DisplayName, PSChildName
PS C:\> $installedItems = $installedItemsX86 + $installedItemsX64
PS C:\> $installedItems | Where-Object -FilterScript { $null -ne $_.DisplayName } | Sort-Object -Property DisplayName | sls 'Management Studio'

@{DisplayName=Microsoft SQL Server Management Studio - 17.4; PSChildName={ac84c935-8f13-4f73-b541-7b09a11bdea8}}
@{DisplayName=SQL Server 2017 Management Studio Extensions; PSChildName={6492E746-1C5D-48C2-A92A-97D431F74664}}
@{DisplayName=SQL Server 2017 Management Studio Extensions; PSChildName={70C24F35-7E36-45FC-B289-3D2849E5556B}}
@{DisplayName=SQL Server Management Studio; PSChildName={F8ADD24D-F2F2-465C-A675-F12FDB70DB82}}
@{DisplayName=SQL Server Management Studio; PSChildName={1B8CFC46-1F08-4DA7-9FEA-E1F523FBD67F}}
@{DisplayName=SQL Server Management Studio for Analysis Services; PSChildName={CC6997A7-1638-4E38-B6CF-E776997036B0}}
@{DisplayName=SQL Server Management Studio for Reporting Services; PSChildName={4DDEB555-26D2-4E68-98AF-8F96232C13F2}}

我实际上尝试了一种不同的方法,它产生了相同的结果(可能是因为两者都“坐在”相同的数据上):

PS C:\> get-wmiobject Win32_Product -Filter "Name like '%sql%management%studio%'" | sort -Property Name | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

IdentifyingNumber                      Name                                                LocalPackage
-----------------                      ----                                                ------------
{6492E746-1C5D-48C2-A92A-97D431F74664} SQL Server 2017 Management Studio Extensions        C:\Windows\Installer\43f1a.msi
{70C24F35-7E36-45FC-B289-3D2849E5556B} SQL Server 2017 Management Studio Extensions        C:\Windows\Installer\43f16.msi
{F8ADD24D-F2F2-465C-A675-F12FDB70DB82} SQL Server Management Studio                        C:\Windows\Installer\43f23.msi
{1B8CFC46-1F08-4DA7-9FEA-E1F523FBD67F} SQL Server Management Studio                        C:\Windows\Installer\43f27.msi
{CC6997A7-1638-4E38-B6CF-E776997036B0} SQL Server Management Studio for Analysis Services  C:\Windows\Installer\43f43.msi
{4DDEB555-26D2-4E68-98AF-8F96232C13F2} SQL Server Management Studio for Reporting Services C:\Windows\Installer\43f3c.msi

两种方法都会产生两个产品 ID:

  • F8ADD24D-F2F2-465C-A675-F12FDB70DB82
  • 1B8CFC46-1F08-4DA7-9FEA-E1F523FBD67F

那么,哪一个是正确的呢?是否有更确定的方法来应对推断正确产品 ID 的疯狂?

azure
  • 1 1 个回答
  • 651 Views

1 个回答

  • Voted
  1. Best Answer
    mark
    2018-04-17T16:27:47+08:002018-04-17T16:27:47+08:00

    我想我终于弄清楚发生了什么,尽管我还没有检查这是否会帮助我使用 Azure 自动化 DSC 安装 SSMS。

    这是我所做的:

    1. 将 SSMS-Setup-ENU.exe 重命名为 SSMS-Setup-ENU.zip
    2. 往里看了一眼。唯一的文本文件名为“0”,这是一个 XML 文件。
    3. 第一个元素是<BurnManifest xmlns="http://schemas.microsoft.com/wix/2008/Burn">我得出的结论,即 exe 是用 WIX burn 创建的。
    4. 将文件重命名回来。
    5. 找到https://stackoverflow.com/questions/26749207/extract-contents-of-burn-bootstrapper
    6. 从https://github.com/wixtoolset/wix3/releases/tag/wix3111rtm下载并提取 wix311-binaries.zip
    7. Ran dark.exe -x d:\temp SSMS-Setup-ENU.exe,它从 SSMS-Setup-ENU.exe 中提取了很多 msi 文件到d:\temp.
    8. 找到https://stackoverflow.com/questions/31919064/powershell-get-the-msi-product-code-out-of-a-msi-file-without-installing
    9. 从答案中保存了 PowerShell 脚本并对其进行了一些修改以简化管道(脚本代码如下)。
    10. 通过脚本传输所有 msis,并使用有问题的产品代码识别两个 msis。

    PowerShell 脚本是:

    param(
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
        [ValidateScript({ ($_ -match "\.msi$") -and (Test-Path $_ -PathType Leaf)})]
        $path)
    
    process
    {
        $comObjWI = New-Object -ComObject WindowsInstaller.Installer
        $MSIDatabase = $comObjWI.GetType().InvokeMember("OpenDatabase","InvokeMethod",$Null,$comObjWI,@("$Path",0))
        $props = @{ Path = "$path" }
        @('ProductCode', 'ProductName') |% {
            $Query = "SELECT Value FROM Property WHERE Property = '$_'"
            $View = $MSIDatabase.GetType().InvokeMember("OpenView","InvokeMethod",$null,$MSIDatabase,($Query))
            $View.GetType().InvokeMember("Execute", "InvokeMethod", $null, $View, $null)
            $Record = $View.GetType().InvokeMember("Fetch","InvokeMethod",$null,$View,$null)
            $props[$_] = $Record.GetType().InvokeMember("StringData","GetProperty",$null,$Record,1)
        }
        New-Object psobject -Property $props
    }
    

    最后的命令行是:

    PS C:\> $g1 = "1B8CFC46-1F08-4DA7-9FEA-E1F523FBD67F"
    PS C:\> $g2 = "F8ADD24D-F2F2-465C-A675-F12FDB70DB82"
    PS C:\> dir D:\temp\AttachedContainer\x64\*.msi | .\GetProductCodeFromMSI.ps1 | sls "($g1|$g2)"
    
    @{Path=d:\temp\AttachedContainer\x64\sql_ssms.msi; ProductName=SQL Server Management Studio; 
    ProductCode={F8ADD24D-F2F2-465C-A675-F12FDB70DB82}}
    @{Path=d:\temp\AttachedContainer\x64\sql_ssms_loc.msi; ProductName=SQL Server Management Studio; 
    ProductCode={1B8CFC46-1F08-4DA7-9FEA-E1F523FBD67F}}
    
    
    PS C:\> 
    

    因此,两个产品代码都在同一个 SSMS 安装中,并且对应于 sql_ssms.msi 和 sql_ssms_loc.msi。两者都具有相同的产品名称 - SQL Server Management Studio。

    现在,我不知道什么是sql_ssms_loc.msi,但我会尝试使用F8ADD24D-F2F2-465C-A675-F12FDB70DB82,因为它对应于sql_ssms.msi。将返回结果。

    编辑 1

    使用 F8ADD24D-F2F2-465C-A675-F12FDB70DB82 似乎有效。

    • 0

相关问题

  • 防火墙更改后失去对 VM azure 的 RDP 访问权限

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve