zoukankan      html  css  js  c++  java
  • AX7: Installing deployable packages with Powershell

    Installing deployable packages to an AX 7 environment can often be done just by a few clicks on LCS (as described in Apply a deployable package on a Microsoft Dynamics 365 for Operations system). Unfortunately the situation isn’t always that simple and you may have to install the package manually, using the process explained in Install a deployable package. It consists of quite a few manual steps and where there are repeated manual steps, one should always consider automation.

    I’ve built a few Powershell functions to help with these tasks:

    #region Parameters
    $folder = 'C:Temp'
    $archiveFileName = 'Updates.zip'
    $runbookId = 'MyRunbook1'
    $ErrorActionPreference = 'Stop'
    #endregion
     
    #region Derived values
    $file = Join-Path $folder $archiveFileName
    $runbookFile = Join-Path $folder "$runbookId.xml"
    $extracted = Join-Path $folder ([System.IO.Path]::GetFileNameWithoutExtension($archiveFileName))
    $topologyFile = Join-Path $extracted 'DefaultTopologyData.xml'
    $updateInstaller = Join-Path $extracted 'AXUpdateInstaller.exe'
    #endregion
     
    Function ExtractFiles
    {
        Unblock-File $file
        Expand-Archive -LiteralPath $file -Destination $extracted
    }
     
    Function SetTopologyData
    {
        [xml]$xml = Get-Content $topologyFile
        $machine = $xml.TopologyData.MachineList.Machine
     
        # Set computer name
        $machine.Name = $env:computername
     
        #Set service models
        $serviceModelList = $machine.ServiceModelList
        $serviceModelList.RemoveAll()
     
        $instalInfoDll = Join-Path $extracted 'Microsoft.Dynamics.AX.AXInstallationInfo.dll'
        [void][System.Reflection.Assembly]::LoadFile($instalInfoDll)
     
        $models = [Microsoft.Dynamics.AX.AXInstallationInfo.AXInstallationInfo]::GetInstalledServiceModel()
        foreach ($name in $models.Name)
        {
            $element = $xml.CreateElement('string')
            $element.InnerText = $name
            $serviceModelList.AppendChild($element)
        }
     
        $xml.Save($topologyFile)
    }
     
    Function GenerateRunbook
    {
        $serviceModelFile = Join-Path $extracted 'DefaultServiceModelData.xml'
        & $updateInstaller generate "-runbookId=$runbookId" "-topologyFile=$topologyFile" "-serviceModelFile=$serviceModelFile" "-runbookFile=$runbookFile"
    }
     
    Function ImportRunbook
    {
        & $updateInstaller import "-runbookfile=$runbookFile"
    }
     
    Function ExecuteRunbook
    {
        & $updateInstaller execute "-runbookId=$runbookId"
    }
     
    Function RerunRunbook([int] $step)
    {
        & $updateInstaller execute "-runbookId=$runbookId" "-rerunstep=$step"
    }
     
    Function SetStepComplete([int] $step)
    {
        & $updateInstaller execute "-runbookId=$runbookId" "-setstepcomplete=$step"
    }
     
    Function ExportRunbook
    {
        & $updateInstaller export "-runbookId=$runbookId" "-runbookfile=$runbookFile"
    }

    When you set parameters (such as the name of your package file) and run the script, you can then execute whole process by the following list of function calls:

    ExtractFiles

    SetTopologyData

    GenerateRunbook

    ImportRunbook

    ExecuteRunbook

    If needed, you can also use RerunRunbook and SetStepComplete (e.g. SetStepComplete 10).

    Note that SetTopologyData takes data just from the current machine, but you can borrow the code and modify it, if you need something more sophisticated.

    This should make things a bit easier and reduce unnecessary errors such as mistyped runbook IDs.

  • 相关阅读:
    业余草 SpringCloud教程 | 第十一篇: 断路器监控(Hystrix Dashboard)(Finchley版本)
    业余草 SpringCloud教程 | 第十篇: 高可用的服务注册中心(Finchley版本)
    业余草 SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
    业余草 SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
    业余草 SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
    POJ2135 Farm Tour
    POJ1149 PIGS
    POJ3041 Asteroids
    2020.7.4模拟 数据结构 (ds)
    2020.7.4模拟 浇花 (flower)
  • 原文地址:https://www.cnblogs.com/dingkui/p/6268744.html
Copyright © 2011-2022 走看看