none
Разобрать MPB c помощью MPBMaker RRS feed

  • Вопрос

  • Как собирать MPB c помощью MPBMaker мы уже знаем , спасибо за это Антону  :)

    А как разобрать экспортированный пакет MPB , для редактирования в Authoring tools ?

    17 июля 2012 г. 13:01

Ответы

Все ответы

  • http://www.code4ward.net/main/Blog/tabid/70/EntryId/153/Inside-Management-Packs.aspx

    Но есть один крайне важный момент. Если вы хотите получить из MPB запечатанный пакет (MP) для того, чтобы на него ссылаться - можете сразу забыть. В MPB хранится только XML-код пакета.


    http://www.scsmsolutions.com/ freemanru (at) gmail (dot) com

    17 июля 2012 г. 14:07
    Модератор
  • Если можно поподробнее , надо выполнить следующий скрипт ?

    где

    $inDir = "C:\SC2012OMRTM\ManagementPacks" #место где лежит экспортированный manage pack
    $outDir = "C:\SCOM_MPS_AS_XML" # manage pack после преобразования
     

    Скрипт:

    $inDir = "C:\SC2012OMRTM\ManagementPacks"

    $outDir = "C:\SCOM_MPS_AS_XML"

    [Reflection.Assembly]::LoadWithPartialName("Microsoft.EnterpriseManagement.Core")

    [Reflection.Assembly]::LoadWithPartialName("Microsoft.EnterpriseManagement.Packaging")
     
    $mpStore = New-Object Microsoft.EnterpriseManagement.Configuration.IO.ManagementPackFileStore($inDir)
     
    #now dump MPB files
    $mps = get-childitem $inDir *.mpb
    $mpbReader = [Microsoft.EnterpriseManagement.Packaging.ManagementPackBundleFactory]::CreateBundleReader()
    if ($mps -ne $null)
    {
        foreach ($file in $mps)
        {
            md ($outDir + "\"+ $file)  #ADDED     
            $mpWriter = new-object Microsoft.EnterpriseManagement.Configuration.IO.ManagementPackXmlWriter($outDir + "\"+ $file)    #ADDED   
            $mpb = $mpbReader.Read($file.FullName, $mpStore)
            foreach($mp in $mpb.ManagementPacks)
            {
                #write the xml
                $mpWriter.WriteManagementPack($mp)
                $streams = $mpb.GetStreams($mp)
                foreach($stream in $streams.Keys)
                {
                    $mpElement = $mp.FindManagementPackElementByName($stream)
                    $fileName = $mpElement.FileName
                    if ($fileName -eq $null)
                    {
                        $fileName = $outDir +'\' + ($mp.Name)+ '.' + $stream+ '.bin'
                    }
                    else
                    {
                        If ($fileName.IndexOf('\') -gt 0)
                        {
                            #only on dir level supported
                            $dir = $outDir + '\' + $fileName.SubString(0, $fileName.IndexOf('\'))
                            if ([System.Io.Directory]::Exists($dir) -ne $true)
                            {
                                [System.Io.Directory]::CreateDirectory($dir)
                            }
                        }
                        #$fileName = "${outdir}\${fileName}"
                        $fileName = $outdir+"\"+$file+"\$filename" #ADDED
                    }
                    Write-Host "`t$fileName"
                    $fs = [system.io.file]::Create($fileName)
                    $streams[$stream].WriteTo($fs)
                    $fs.Close()
                }
            }
        }
    }

    23 июля 2012 г. 12:43