Posted in: Windows 10, Windows 11, Windows server, Základy PowerShellu

Práce s ESD

V tomto příspěvku bych se s Vámi rád podělil o svůj PowerShell modul, který prostřednictvím nástroje DSM umožňuje vytvářet datové Archivy ve formátu ESD a rovněž již Existující ESD soubory extrahovat do složky.
Infomrace je schopen číst i o WIM souborech a vlastně nic nebrání vytvoření souboru ve formátu WIM místo ESD, rozbalení WIM pak sice zvládnuto je, ale stojí hodně času.
Pro stažení modulu a zobrazení jeho zdrojového kódu čtěte dále Stažení modulu ve formátu psm1

Zdrojový kód modulu:

@{
        Author = ‚Petrásek Jan‘
        CompanyName = ‚elektrotechnika.vesele.info‘
        Copyright = ‚Petrásek ©2020‘
        Description = ‚ Pomocí nástroje DISM umožňuje zobrazit informace o daném ESD souboru. Umí extrhovat daný index či název do zadané složky. Pokud se nazadá název nebo index,
     bude do zadané složky extrahován index 1 daného souboru.
     Hlavním úkolem je tvorba ESD souborů ze zadané složky, do archivu jsou samozřejmně zahrnuty všechny podložky a jejich obsah. Komprese archivu je maximální možná.
     Název indexu je možné zadat v podobě volitelného parametru.
     Není podporována komprese samostatných souborů ani více indexové archivy či popis jednotlivých indexů. Informace dokáže vypsat i o Wim souboru.‘
        PowerShellVersion = ‚5.1‘ #minimální verze PowerShellu
        CLRVersion = ‚5.1‘ #minimální verze příkazového runtimeu
        ModuleVersion = ‚1.0‘
        ModulToProcess = ‚folder2ESD.psm1‘
        AliasesToExport = ‚*‘ #oddělujeme čárkou
        FunctionsToExport =’*‘
    }

Set-Alias -name F2ESD -value Convert-Folder2ESD
function Convert-Folder2ESD
{
<#
  .Synopsis
     Convert-Folder2ESD
  .DESCRIPTION
     Pomocí nástroje DISM umožňuje zobrazit informace o daném ESD souboru. Umí extrhovat daný index či název do zadané složky. Pokud se nazadá název nebo index,
     bude do zadané složky extrahován index 1 daného souboru.
     Hlavním úkolem je tvorba ESD souborů ze zadané složky, do archivu jsou samozřejmně zahrnuty všechny podložky a jejich obsah. Komprese archivu je maximální možná.
     Název indexu je možné zadat v podobě volitelného parametru.
     Není podporována komprese samostatných souborů ani více indexové archivy či popis jednotlivých indexů.
  .EXAMPLE
      Convert-Folder2ESD -rezim komprese -soubor I:\2016-2017.esd -slozka I:\2016-2017 -nazev Fotokrouzek2016-2017
      Do souboru I:\I:\2016-2017.esd zabalí obsah složky I:\2016-2017 na index 1 pod jménem indexu Fotokrouzek2016-2017
  .EXAMPLE
     Convert-Folder2ESD -rezim dekomprese -soubor I:\Drivers.ESD -slozka I:\Ovladace
     Do složky I:\Ovladace vybalí obsah archivu I:\Drivers.esd
  .EXAMPLE
     Convert-Folder2ESD -rezim info -soubor I:\Drivers.ESD -slozka I:\Ovladace
     DZobrazí dostuné informace o archyvu I:|Drivers.esd
  .EXAMPLE
     Convert-Folder2ESD -rezim dekomprese -soubor I:\Windows\Souces\Install.esd -slozka I:\Win10Pro -index 5
     Extrahuje instalačního souboru offline podobu obrazu Windows 10 Pro, které jsou na indexu 5 do složky C:\Win10Pro
  .EXAMPLE
     Convert-Folder2ESD -rezim dekomprese -soubor I:\2016-2017.esd -slozka I:\2016-2017 -nazev Fotokrouzek2016-2017
     Extrahuje z archivu I:\2016-2017.esd index se jménem Fotokrouzek2016-2017 do složky I:\2016-2017
  .NOTES
     Verze: 1.0
     Autor: Petrásek Jan
     Autor nenese žádnou odpovědnost za případnou ztrátu či poškození dat!
     Všechna práva vyhrazena
     ©2020
  .FUNCTIONALITY
     Tvorba a extrahování ESD
#>
    param(
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [validateSet(‚Info‘, ‚dekomprese‘, ‚komprese‘)] [Alias(‚r‘)]
    [string]$rezim,
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [Alias(‚f‘)]
    [string]$soubor,
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)] [Alias(‚d‘)]
    [string]$slozka,
    [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [Alias(‚name‘, ‚n‘)]
    [string]$nazev,
    [Parameter(Mandatory=$false, ValueFromPipeline=$true)] [Alias(‚i‘)]
    [string]$index
    )

    Switch($rezim)
    {
        info{
           Dism.exe /Get-ImageInfo /ImageFile:$soubor
        }
        komprese {
            if($nazev -ne „“)
            {
                Dism /Capture-Image /ImageFile:$soubor /Compress:max /CheckIntegrity /CaptureDir:$slozka /Name:$nazev
            }else{
                Dism /Capture-Image /ImageFile:$soubor /Compress:max /CheckIntegrity /CaptureDir:$slozka /Name:$soubor
            }
            Write-Host „“
            Write-Host „Komprese dokončena“ -ForegroundColor Green
        }
        dekomprese{
            IF(!(Test-Path ‚C:\temp\ESD2Folder‘))
            {
                New-Item -Path ‚C:\temp\ESD2Folder‘ -ItemType Directory
            }
            if($nazev -ne „“){
                dism /export-image /SourceImageFile:$soubor /SourceName:$nazev /DestinationImageFile:C:\temp\ESD2Folder.wim /Compress:max /CheckIntegrity
                Dism /Mount-Image /ImageFile:C:\temp\ESD2Folder.wim /MountDir:C:\temp\ESD2Folder /Name:$nazev
                cd C:\temp\ESD2Folder
                Copy-Item C:\temp\ESD2Folder\* -Recurse $slozka
                cd $home
                Dism /Unmount-Image /MountDir:C:\temp\ESD2Folder /discard
                Remove-Item -Path C:\temp\ESD2Folder.wim -Force
                Remove-Item -Path C:\temp -Recurse -Force
                Write-Host „“
                Write-Host „Extrahování dat dokončeno“ -ForegroundColor Green
            }elseif($index -ne „“)
            {
                dism /export-image /SourceImageFile:$soubor /SourceIndex:$index /DestinationImageFile:C:\temp\ESD2Folder.wim /Compress:max /CheckIntegrity
                Dism /Mount-Image /ImageFile:C:\temp\ESD2Folder.wim /MountDir:C:\temp\ESD2Folder /Index:$index
                cd C:\temp\ESD2Folder
                Copy-Item C:\temp\ESD2Folder\* -Recurse $slozka
                cd $home
                Dism /Unmount-Image /MountDir:C:\temp\ESD2Folder /discard
                Remove-Item -Path C:\temp\ESD2Folder.wim -Force
                Remove-Item -Path C:\temp -Recurse -Force
                Write-Host „“
                Write-Host „Extrahování dat dokončeno“ -ForegroundColor Green
            }else{
                dism /export-image /SourceImageFile:$soubor /SourceIndex:1 /DestinationImageFile:C:\temp\ESD2Folder.wim /Compress:max /CheckIntegrity
                Dism /Mount-Image /ImageFile:C:\temp\ESD2Folder.wim /MountDir:C:\temp\ESD2Folder /Index:1
                cd C:\temp\ESD2Folder
                Copy-Item C:\temp\ESD2Folder -Recurse $slozka
                cd $home
                Dism /Unmount-Image /MountDir:C:\temp\ESD2Folder /discard
                Remove-Item -Path C:\temp\ESD2Folder.wim -Force
                Remove-Item -Path C:\tempr -Recurse -Force
                Write-Host „“
                Write-Host „Extrahování dat dokončeno“ -ForegroundColor Green
            }
        }
        Default{
            Write-Host „KONČÍM, chybně neplatná hodnota parametru režim“ -ForegroundColor Red
        }
    }
}
#Zobrazní nápovědy

man Convert-Folder2ESD -ShowWindow

Back to Top