Tribut an die Community - DISM UDF

  • Ahoi Leute,
    habe endlich meine DISM UDF fertiggestellt. DISM (Deployment Image Servicing Management) gehört zu den Deployment Tools des Windows Assessment and Deployment Kit (ADK), welches für Windows 8 bereitgestellt wird. Es löst ImageX ab und die im AIK enthaltene DISM Version 6.1.7600.16385. Leider werden wir zukünftig die wimgapi UDF nicht damit ablösen können, da die DISM API das splitten, capturen und appenden von images nicht unterstützt. Lediglich das Kommandozeilen Tool DISM.exe wiegt mit den neuen Funktionen seit 6.2.9200.16384 auf, welches auch die aktuelle Version darstellt.

    Wenn ich das richtig verstanden habe sind PowerShell Cmdlets für die "Extra"-Funktionen verantwortlich. Wenn möglich versuche ich die Funktionen noch auszulagern. Wer dazu mehr weiß, bitte melden!

    Voraussetzung: Windows ADK - Deployment Tools -> Download

    Example:

    [autoit]

    #include "G:\dism2.8.7.8.au3"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Local $sMountPath = "C:\mount"
    Local $sLogFilePath = "C:\dism.log"
    Local $sScratchDirectory = "C:\scratchDir"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; #VARIABLES# ===================================================================================================================
    ConsoleWrite("--------------------------------" & "DismInitialize" & @CRLF)
    $init = _DISM_Initialize($DismLogErrorsWarningsInfo)
    ConsoleWrite("DismInitialize error: " & @error & @CRLF)
    ConsoleWrite("DismInitialize returns: " & $init & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCleanupMountpoints" & @CRLF)
    $cleanup = _DISM_CleanupMountpoints()
    ConsoleWrite("DismCleanupMountpoints error: " & @error & @CRLF)
    ConsoleWrite("DismCleanupMountpoints returns: " & $cleanup & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismMountImage" & @CRLF)
    ;~ $return = _DISM_MountImage("C:\win7_images\x64\sources\install.wim", $sMountPath, 3, 0, $DismImageIndex, $DISM_MOUNT_READWRITE)
    ;~ ConsoleWrite("_DISM_MountImage error: " & @error & @CRLF)
    ;~ ConsoleWrite("_DISM_MountImage return: " & $return & @CRLF)
    ;~ Exit
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    $session = _DISM_OpenSession($sMountPath)
    ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismAddDriver" & @CRLF)
    $add = _DISM_AddDriver($session, "C:\HDx64\viahdb.inf", False)
    ConsoleWrite("DismAddDriver error: " & @error & @CRLF)
    ConsoleWrite("DismAddDriver returns: " & $add & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismAddPackage" & @CRLF)
    ;~ $addpackage = _DISM_AddPackage($session, "C:\lp_en.cab")
    ;~ ConsoleWrite("DismAddPackage error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismAddPackage returns: " & $addpackage & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismApplyUnattend" & @CRLF)
    $apply = _DISM_ApplyUnattend($session, "C:\win7_unattended\AutoUnattend.xml")
    ConsoleWrite("DismApplyUnattend error: " & @error & @CRLF)
    ConsoleWrite("DismApplyUnattend returns: " & $apply & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ; ===============================================================================================================================
    ;~ ; CommitImage
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismDisableFeature" & @CRLF)
    ;~ $disable = _DISM_DisableFeature($session, "TelnetClient")
    ;~ ConsoleWrite("DismDisableFeature error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismDisableFeature returns: " & $disable & @CRLF)
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismEnableFeature" & @CRLF)
    ;~ $enable = _DISM_EnableFeature($session, "TelnetClient")
    ;~ ConsoleWrite("DismEnableFeature error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismEnableFeature returns: " & $enable & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    ;~ $close = _DISM_CloseSession($session)
    ;~ ConsoleWrite("DismCloseSession error:" & @error & @CRLF)
    ;~ ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ;~ ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismOpenSession" & @CRLF)
    ;~ $session = _DISM_OpenSession($sMountPath)
    ;~ ConsoleWrite("DismOpenSession returns: " & $session & @CRLF)
    ;~ ConsoleWrite("Session: " & $session & @CRLF)
    ;~ ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetDriverInfo" & @CRLF)
    Local $DriverPackage
    $getdriverinfo = _DISM_GetDriverInfo($session, "wvmbushid.inf", $DriverPackage, True)
    ConsoleWrite("DismGetDriverInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetDriverInfo returns: " & $getdriverinfo & @CRLF)
    _ArrayDisplay($getdriverinfo, "DriverInfo")
    _ArrayDisplay($DriverPackage, "DriverPackage (Extended)")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetDrivers" & @CRLF)
    $getdriver = _DISM_GetDrivers($session, True)
    ConsoleWrite("DismGetDrivers error: " & @error & @CRLF)
    ConsoleWrite("DismGetDrivers returns: " & $getdriver & @CRLF)
    _ArrayDisplay($getdriver)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatureInfo" & @CRLF)
    Local $CustomProperties
    $featureinfo = _DISM_GetFeatureInfo($session, "WindowsMediaPlayer", $CustomProperties)
    ConsoleWrite("DismGetFeatureInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatureInfo returns: " & $featureinfo & @CRLF)
    _ArrayDisplay($featureinfo, "FeatureInfo")
    _ArrayDisplay($CustomProperties, "CustomProperties")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatureParent" & @CRLF)
    $featureparent = _DISM_GetFeatureParent($session, "WindowsMediaPlayer")
    ConsoleWrite("DismGetFeatureParent error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatureParent returns: " & $featureparent & @CRLF)
    _ArrayDisplay($featureparent, "FeatureParent")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetFeatures" & @CRLF)
    $getf = _DISM_GetFeatures($session)
    ConsoleWrite("DismGetFeatures error: " & @error & @CRLF)
    ConsoleWrite("DismGetFeatures returns: " & $getf & @CRLF)
    _ArrayDisplay($getf, "Features")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetImageInfo" & @CRLF)
    $imageinfo = _DISM_GetImageInfo("C:\win7_images\x64\sources\install.wim")
    ConsoleWrite("DismGetImageInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetImageInfo returns: " & $imageinfo & @CRLF)
    _ArrayDisplay($imageinfo, "ImageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetMountedImageInfo" & @CRLF)
    $mountedimages = _DISM_GetMountedImageInfo()
    ConsoleWrite("_DISM_GetMountedImageInfo error: " & @error & @CRLF)
    ConsoleWrite("_DISM_GetMountedImageInfo return: " & $mountedimages & @CRLF)
    _ArrayDisplay($mountedimages, "MountedImageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetPackageInfo" & @CRLF)
    Local $CustomProperties
    Local $Features
    $packageinfo = _DISM_GetPackageInfo($session, "Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.1.7601.17514", $CustomProperties, $Features)
    ConsoleWrite("DismGetPackageInfo error: " & @error & @CRLF)
    ConsoleWrite("DismGetPackageInfo returns: " & $packageinfo & @CRLF)
    _ArrayDisplay($CustomProperties, "CustomProperties")
    _ArrayDisplay($Features, "Features")
    _ArrayDisplay($packageinfo, "PackageInfo")
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismGetPackages" & @CRLF)
    $getpackage = _DISM_GetPackages($session)
    ConsoleWrite("DismGetPackages error: " & @error & @CRLF)
    ConsoleWrite("DismGetPackages returns: " & $getpackage & @CRLF)
    _ArrayDisplay($getpackage, "GetPackages")
    ; ===============================================================================================================================
    ;~ ConsoleWrite("--------------------------------" & "DismRemountImage" & @CRLF)
    ;~ $remount = _DISM_RemountImage($sMountPath)
    ;~ ConsoleWrite("DismRemountImage error: " & @error & @CRLF)
    ;~ ConsoleWrite("DismRemountImage returns: " & $remount & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismRemoveDriver" & @CRLF)
    $remove = _DISM_RemoveDriver($session, "oem1.inf")
    ConsoleWrite("DismRemoveDriver error: " & @error & @CRLF)
    ConsoleWrite("DismRemoveDriver returns: " & $remove & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismRemovePackage" & @CRLF)
    $removepackage = _DISM_RemovePackage($session, "Package_for_KB2446710~31bf3856ad364e35~amd64~~6.1.1.3")
    ConsoleWrite("DismRemovePackage error: " & @error & @CRLF)
    ConsoleWrite("DismRemovePackage returns: " & $removepackage & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCommitImage" & @CRLF)
    $commit = _DISM_CommitImage($session)
    ConsoleWrite("DismCommitImage error: " & @error & @CRLF)
    ConsoleWrite("DismCommitImage returns: " & $commit & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismCloseSession" & @CRLF)
    $close = _DISM_CloseSession($session)
    ConsoleWrite("DismCloseSession error: " & @error & @CRLF)
    ConsoleWrite("DismCloseSession returns: " & $close & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismUnmountImage" & @CRLF)
    $unmount = _DISM_UnmountImage($sMountPath, $DISM_DISCARD_IMAGE)
    ConsoleWrite("DismUnmountImage error: " & @error & @CRLF)
    ConsoleWrite("DismUnmountImage returns: " & $unmount & @CRLF)
    ; ===============================================================================================================================
    ConsoleWrite("--------------------------------" & "DismShutdown" & @CRLF)
    $shut = _DISM_Shutdown()
    ConsoleWrite("DismShutdown error: " & @error & @CRLF)
    ConsoleWrite("DismShutdown returns: " & $shut & @CRLF)
    ; ===============================================================================================================================

    [/autoit]

    Es wurden nicht immer alle Paramter ausgereizt, aber ich behaupte mal, so sieht die gewöhnliche Anwendung aus.

    Freue mich über Verbesserungsvorschläge...

  • Gehört denke ich eher in die Unterforen "Projekte" oder "Scripte", da du ja offensichtlich keine Hilfe beim Lösen eines Problems suchst, sondern dein "fertiges" Werk hier zur Verfügung stellen möchtest. Vielleicht mags ja jemand verschieben...