================================================================================
  NUTANIX MOVE WINDOWS SCRIPTS COMPARISON: v6.0.0 vs v6.1.2
  Generated: February 23, 2026
  Source 6.0.0: Move appliance 192.168.66.59
  Source 6.1.2: Move appliance 192.168.66.65
================================================================================


================================================================================
  1. FILES INVENTORY
================================================================================

  6.0.0 FILES                              6.1.2 FILES
  ----------                               ----------
  esx_setup_uvm.ps1       (35KB)           esx_setup_uvm.ps1       (60KB)
  (does not exist)                         validate_prep_state.ps1  (1.7KB)  ** NEW **

  scripts\cleanup_installation.ps1         scripts\cleanup_installation.ps1
  scripts\RetainIP.ps1                     scripts\RetainIP.ps1
  scripts\UninstallVMwareTools.ps1         scripts\UninstallVMwareTools.ps1
  scripts\InstallNGT.ps1                   scripts\InstallNGT.ps1
  scripts\NutanixMove.bat                  scripts\NutanixMove.bat
  scripts\RetainDisabledIPConfigurations   scripts\RetainDisabledIPConfigurations.ps1
  scripts\DisableIPv6.ps1                  scripts\DisableIPv6.ps1
  scripts\setSANPolicy.bat                 scripts\setSANPolicy.bat
  scripts\TaskNutanixMoveOnStartConfig.xml scripts\TaskNutanixMoveOnStartConfig.xml

  binaries\wmi-net-util.exe (20.61MB)      binaries\wmi-net-util.exe (15.40MB)
  (does not exist)                         binaries\net-util.exe     (11.89MB) ** NEW **
  binaries\VirtIO-x64.msi  (23.61MB)      binaries\VirtIO-x64.msi  (24.00MB)
  binaries\VirtIO-x86.msi  (12.72MB)      binaries\VirtIO-x86.msi  (12.79MB)


================================================================================
  2. FILE-BY-FILE COMPARISON SUMMARY
================================================================================

  FILE                                 STATUS       DELTA
  ----                                 ------       -----
  esx_setup_uvm.ps1                    MAJOR CHANGE +556 lines, +24,771 bytes
  validate_prep_state.ps1              NEW IN 6.1.2 1,717 bytes
  cleanup_installation.ps1             CHANGED      -53 lines, -2,522 bytes
  RetainIP.ps1                         CHANGED      -6 lines, -20 bytes
  UninstallVMwareTools.ps1             CHANGED      +102 lines, +5,137 bytes
  InstallNGT.ps1                       VERSION ONLY 0 bytes (version string only)
  NutanixMove.bat                      CHANGED      -34 lines, -44 bytes
  RetainDisabledIPConfigurations.ps1   VERSION ONLY 0 bytes (version string only)
  DisableIPv6.ps1                      VERSION ONLY 0 bytes (version string only)
  setSANPolicy.bat                     IDENTICAL    No changes
  TaskNutanixMoveOnStartConfig.xml     IDENTICAL    No changes
  wmi-net-util.exe                     DIFFERENT    -5.21MB smaller in 6.1.2
  net-util.exe                         NEW IN 6.1.2 11.89MB
  Nutanix-VirtIO-latest-stable.msi     DIFFERENT    +0.39MB
  Nutanix-VirtIO-latest-stable-x86.msi DIFFERENT    +0.07MB


================================================================================
  3. DETAILED CHANGES PER FILE
================================================================================

--------------------------------------------------------------------------------
  3.1  esx_setup_uvm.ps1  (MAJOR REWRITE)
--------------------------------------------------------------------------------

  This is the most important script - the main VM preparation script for
  ESXi-to-AHV migrations. It went from 820 lines (6.0.0) to 1,376 lines
  (6.1.2) with 750 changed lines. Key changes:

  A) NEW: Preparation State Tracking System
     - 6.1.2 adds a complete state tracking system writing to "prep_state.txt"
     - New functions: Initialize-PrepState, Update-PrepState, Update-OverallState,
       Show-PrepState, Cleanup-PrepStateOnExit
     - Each step (download, VirtIO install, SAN policy, etc.) is tracked as
       NotStarted -> InProgress -> Done/Failed/Interrupted
     - On script exit/crash, any "InProgress" steps are marked "Interrupted"
     - This allows monitoring/troubleshooting exactly where preparation stopped

  B) NEW: Step Progress UI
     - 11 new functions for visual progress: Step-Start, Step-Done, Step-Fail,
       SubStep-Start, SubStep-Done, SubStep-Fail, Calculate-TotalSteps, etc.
     - Console shows colored output: [STEP-1/7] Starting... [OK-1/7] Completed
     - Much better visibility during execution vs 6.0.0 which had basic logging

  C) NEW: Cleanup-Before-Prep Pattern
     - Invoke-CleanupIfExists function downloads and runs cleanup_installation.ps1
       BEFORE starting preparation
     - This makes the script safely re-runnable (idempotent)
     - In 6.0.0 there was no automatic cleanup before re-preparation

  D) REMOVED: VirtIO Certificate Handling
     - 6.0.0 had Add-Certificate function that installed VirtIO certificates:
       Nutanix-VirtIO-sha1.cer, Nutanix-VirtIO-sha2.cer,
       Nutanix-VirtIO-sha1-balloon-driver.cer,
       Nutanix-VirtIO-scsi-passthrough-driver.cer
     - 6.1.2 completely removes all certificate logic
     - The 6.1.2 VirtIO MSI is properly signed and no longer needs external certs
     - This also means the "certs" subdirectory is no longer downloaded/created

  E) NEW: net-util.exe + noWMIC Changes
     - 6.0.0: NoWMICOSStrings = @("2025") - only Server 2025
     - 6.1.2: NoWMICOSStrings = @("2025", "Windows 11") - adds Windows 11
     - When noWMIC is true, 6.1.2 downloads "net-util.exe" instead of
       "wmi-net-util.exe"
     - VirtIO verification uses Get-CimInstance instead of wmic.exe on noWMIC OSes
     - This is because WMIC is deprecated/removed in Server 2025 and Windows 11

  F) NEW: validate_prep_state.ps1 Download
     - At the end, 6.1.2 downloads a validation script from the appliance
     - Can be run post-preparation to verify everything completed correctly

  G) Parameters: IDENTICAL between versions (same param block)


--------------------------------------------------------------------------------
  3.2  cleanup_installation.ps1
--------------------------------------------------------------------------------

  - 6.0.0: 10,821 bytes -> 6.1.2: 8,299 bytes (-2,522 bytes, -53 lines)
  - REMOVED: Remove-Certificate function and all VirtIO certificate cleanup
    (Nutanix-VirtIO-sha1.cer, sha2.cer, sha1-balloon, scsi-passthrough)
  - This is consistent with certificates being removed from the install flow
  - Version string: 6.0.0 -> 6.1.2


--------------------------------------------------------------------------------
  3.3  UninstallVMwareTools.ps1
--------------------------------------------------------------------------------

  - 6.0.0: 13,023 bytes -> 6.1.2: 18,160 bytes (+5,137 bytes, +102 lines)
  - SIGNIFICANT addition: Forceful cleanup after VMware Tools uninstall
  - NEW steps in 6.1.2:
    1. Stop-Service -Name <vmware-service> -Force (stops services before removal)
    2. Takeown /F "C:\Program Files\VMware\VMware Tools\" /R /D Y
    3. icacls "C:\Program Files\VMware\VMware Tools\" /grant administrators:F /T
    4. Remove-Item -Path "C:\Program Files\VMware\VMware Tools\" -Recurse -Force
    5. Same takeown/icacls/remove for parent "C:\Program Files\VMware\" folder
  - 6.1.2 is much more aggressive at cleaning VMware artifacts
  - This fixes cases where VMware Tools uninstaller left behind locked files


--------------------------------------------------------------------------------
  3.4  NutanixMove.bat
--------------------------------------------------------------------------------

  - 6.0.0: 17,861 bytes -> 6.1.2: 17,817 bytes (-44 bytes, 34 lines changed)
  - REMOVED: noWMIC conditional wrapping around wmi-net-util download/copy
    - 6.0.0: if "%noWMIC%"=="false" ( ... download wmi-net-util ... )
    - 6.1.2: always downloads the appropriate util (no conditional)
  - NEW: References net-util.exe as WMIUTIL_FINAL_PATH when noWMIC is set
  - NEW: More error checking - "if !errorlevel! NEQ 0 ( exit /b !errorlevel! )"
    added after multiple CALL statements
  - Version string: 6.0.0 -> 6.1.2


--------------------------------------------------------------------------------
  3.5  RetainIP.ps1
--------------------------------------------------------------------------------

  - 6.0.0: 20,483 bytes -> 6.1.2: 20,463 bytes (-20 bytes, 6 lines changed)
  - NIC retry timing changed:
    - 6.0.0: MaxRetriesToFetchEnabledNics = 60, Delay = 1000000000 (1 sec nanosec)
    - 6.1.2: MaxRetriesToFetchEnabledNics = 6, Delay = 10 (seconds)
    - Same total wait time (~60 seconds) but less frequent polling
  - Version string: 6.0.0 -> 6.1.2


--------------------------------------------------------------------------------
  3.6  InstallNGT.ps1 / RetainDisabledIPConfigurations.ps1 / DisableIPv6.ps1
--------------------------------------------------------------------------------

  - Version string update only (6.0.0 -> 6.1.2)
  - No functional changes


--------------------------------------------------------------------------------
  3.7  setSANPolicy.bat / TaskNutanixMoveOnStartConfig.xml
--------------------------------------------------------------------------------

  - IDENTICAL - no changes between versions


--------------------------------------------------------------------------------
  3.8  Binaries
--------------------------------------------------------------------------------

  wmi-net-util.exe:
    - 6.0.0: 20.61 MB  ->  6.1.2: 15.40 MB  (5.21 MB smaller)
    - Different binary, likely recompiled/optimized

  net-util.exe:
    - NEW in 6.1.2: 11.89 MB
    - Alternative to wmi-net-util.exe for OSes where WMIC is deprecated
    - Used on Windows Server 2025 and Windows 11

  Nutanix-VirtIO-latest-stable.msi (x64):
    - 6.0.0: 23.61 MB  ->  6.1.2: 24.00 MB  (+0.39 MB)
    - Updated VirtIO drivers, now includes embedded certificates

  Nutanix-VirtIO-latest-stable-x86.msi:
    - 6.0.0: 12.72 MB  ->  6.1.2: 12.79 MB  (+0.07 MB)
    - Updated VirtIO drivers for 32-bit systems


================================================================================
  4. WINDOWS SERVER VERSION COMPATIBILITY
================================================================================

  Both 6.0.0 and 6.1.2 support the SAME list of operating systems:

  SUPPORTED WINDOWS SERVER VERSIONS:
    - Windows Server 2008
    - Windows Server 2008 R2
    - Windows Server 2012
    - Windows Server 2012 R2
    - Windows Server 2016
    - Windows Server 2019
    - Windows Server 2022
    - Windows Server 2025

  SUPPORTED WINDOWS CLIENT VERSIONS:
    - Windows 7
    - Windows 8
    - Windows 10
    - Windows 11

  The script checks OS support by matching the OS caption string against
  the SupportedOSStrings array. If the OS is not in this list, the script
  will EXIT with an error.

  SPECIAL HANDLING PER OS VERSION:

  A) Windows Server 2008 R2 / Windows 7 (flagged as "old OS"):
     - Script checks for SHA2 compatibility issues with VirtIO driver signing
     - May produce additional warnings about certificate compatibility

  B) Windows Server 2025 / Windows 11 (noWMIC mode):
     - 6.0.0: Only Server 2025 triggers noWMIC mode
     - 6.1.2: Both Server 2025 AND Windows 11 trigger noWMIC mode
     - In noWMIC mode:
       * Downloads net-util.exe (6.1.2) instead of wmi-net-util.exe
       * Uses Get-CimInstance instead of wmic.exe for VirtIO verification
       * Passes --no-wmic flag to NutanixMove.bat
     - This is because wmic.exe is DEPRECATED and may be removed in these OSes

  C) PowerShell Version Requirement:
     - The minPSVersion parameter is passed by the Move appliance
     - Typical minimum: PowerShell 4.0
     - Windows Server 2008 ships with PS 2.0 (needs upgrade)
     - Windows Server 2008 R2 ships with PS 2.0 (needs upgrade)
     - Windows Server 2012 ships with PS 3.0 (may need upgrade)
     - Windows Server 2012 R2+ ships with PS 4.0+ (should be fine)

  D) 32-bit vs 64-bit:
     - Script auto-detects via OSArchitecture
     - Downloads x86 MSI for 32-bit, x64 MSI for 64-bit
     - Only Server 2008 / 2008 R2 realistically run as 32-bit


================================================================================
  5. WHAT TO LOOK OUT FOR
================================================================================

  5.1  CRITICAL ITEMS
  ------------------

  A) CERTIFICATE REMOVAL IN 6.1.2
     - If you previously used 6.0.0 and it installed VirtIO certificates,
       then switched to 6.1.2, the old certificates remain in the
       TrustedPublisher store
     - The 6.1.2 cleanup script no longer removes them
     - This should not cause issues but is worth knowing

  B) AGGRESSIVE VMWARE TOOLS CLEANUP (6.1.2)
     - 6.1.2 UninstallVMwareTools.ps1 will forcefully delete the entire
       "C:\Program Files\VMware\" directory tree
     - If the VM has OTHER VMware products installed (VMware Horizon Agent,
       VMware DEM, App Volumes agent, etc.), 6.1.2 WILL BREAK THEM
     - 6.0.0 only ran the VMware Tools uninstaller and was less aggressive
     - RECOMMENDATION: If VMs have other VMware products, test carefully
       or modify UninstallVMwareTools.ps1 to only remove VMware Tools subfolder

  C) net-util.exe REQUIRED FOR SERVER 2025 / WINDOWS 11 (6.1.2 only)
     - If you use 6.1.2 on Server 2025, it expects net-util.exe to be available
     - This file does not exist in 6.0.0
     - If running 6.0.0 on Server 2025, the script tries to use wmi-net-util.exe
       with the noWMIC flag, but NutanixMove.bat in 6.0.0 has different logic
     - RECOMMENDATION: Use 6.1.2 for Server 2025 migrations

  D) PREP STATE FILE (6.1.2 only)
     - 6.1.2 writes C:\Nutanix\prep_state.txt during execution
     - If the script is interrupted, InProgress steps become "Interrupted"
     - On re-run, the cleanup-before-prep pattern resets everything
     - If you're automating/scripting around the preparation, you can parse
       this file to check the outcome

  5.2  OPERATIONAL ITEMS
  ----------------------

  A) RE-RUNNABILITY
     - 6.1.2 is much better for re-running preparation (cleanup-first pattern)
     - 6.0.0 could leave artifacts from previous runs that cause conflicts
     - RECOMMENDATION: Use 6.1.2 when you expect to re-run preparation

  B) NIC DETECTION TIMING (RetainIP.ps1)
     - 6.0.0: Polls 60 times at 1-second intervals
     - 6.1.2: Polls 6 times at 10-second intervals
     - Same total timeout (~60 seconds) but different behavior
     - If NICs take a long time to come up post-migration, the less frequent
       polling in 6.1.2 gives the OS more time to settle between checks
     - This should generally be an improvement

  C) ERROR HANDLING
     - 6.1.2 NutanixMove.bat has more error exit checks
     - 6.0.0 could silently continue past some failures
     - This means 6.1.2 may FAIL where 6.0.0 appeared to succeed but left
       the VM in a bad state

  D) WMI DEPRECATION
     - Both versions still use Get-WmiObject for OS detection and VirtIO checks
       on non-noWMIC systems
     - Get-WmiObject is deprecated in PS 7+ in favor of Get-CimInstance
     - This works fine on built-in Windows PowerShell 5.1 (which all Server
       versions use by default)
     - If running under PowerShell 7, some Get-WmiObject calls may produce
       warnings (but still work via compatibility layer)

  5.3  VERSION-SPECIFIC GOTCHAS
  -----------------------------

  A) Windows Server 2008 / 2008 R2:
     - Requires PowerShell 4.0+ (must be manually upgraded)
     - May have TLS 1.2 issues downloading from Move appliance
     - VirtIO driver signing may require SHA2 support (KB3033929)
     - 32-bit versions use the x86 MSI

  B) Windows Server 2012:
     - Ships with PS 3.0 - may need upgrade to 4.0+
     - TLS 1.2 must be enabled (not default)

  C) Windows Server 2012 R2:
     - Ships with PS 4.0 - should work out of the box
     - TLS 1.2 must be enabled (not default in early builds)

  D) Windows Server 2016 / 2019 / 2022:
     - Full compatibility, no known issues
     - These are the most commonly migrated versions

  E) Windows Server 2025:
     - MUST use 6.1.2 for proper noWMIC support with net-util.exe
     - 6.0.0 has partial noWMIC support but lacks net-util.exe
     - WMIC is not available on Server 2025

  F) Windows 11:
     - Only 6.1.2 properly handles noWMIC mode for Windows 11
     - 6.0.0 does NOT include Windows 11 in its NoWMICOSStrings list,
       meaning it would try to use wmic.exe which may not be available


================================================================================
  6. RECOMMENDATION SUMMARY
================================================================================

  USE 6.1.2 WHEN:
    - Migrating Windows Server 2025 or Windows 11
    - You need re-runnable/idempotent preparation
    - You want better error visibility and state tracking
    - You want more aggressive VMware Tools cleanup

  USE 6.0.0 WHEN:
    - You have VMs with multiple VMware products (safer VMware cleanup)
    - You need the exact same behavior as previously tested migrations
    - You don't need Server 2025 / Windows 11 support

  FOR BOTH VERSIONS:
    - Always run as Administrator
    - Ensure PowerShell 4.0+ is installed on older OSes
    - Ensure TLS 1.2 is enabled on Server 2012 and older
    - Test VirtIO driver installation on a pilot VM before mass migration
    - Check prep_state.txt (6.1.2) or logs (both) after preparation


================================================================================
  END OF COMPARISON DOCUMENT
================================================================================
