• Inspection sécurisée de liens suspects avec Application Guard

    🔐 Inspection sécurisée de liens suspects avec Application Guard et notepad.libreops.cc

    🎯 Objectif

    Analyser des liens suspects provenant d’e-mails ou de messages en toute sécurité, en procédant ainsi :

    1. Coller les liens dans un bloc-notes en ligne avant d’entrer dans le bac à sable.
    2. Ouvrir Microsoft Edge avec Application Guard.
    3. Accéder à la page du bloc-notes depuis Edge sécurisé pour copier les liens et les inspecter sans risque.

    🧰 Prérequis

    • Windows 10/11 Professionnel ou Entreprise
    • Microsoft Defender Application Guard activé :
      • Ouvrir optionalfeatures.exe → cocher Microsoft Defender Application Guard
      • Redémarrer si demandé

    🌐 Étapes à suivre

    🟢 Étape 1 : Ouvrir notepad.libreops.cc dans votre navigateur principal

    1. Rendez-vous sur : https://notepad.libreops.cc
    2. Collez le ou les liens suspects dans la note.
    3. Cliquez sur « Save » (en haut à droite).
    4. Copiez l’URL unique de la note (ex. : https://notepad.libreops.cc/xyz123abc456)

    💡 Vous utiliserez cette URL dans le navigateur sécurisé pour accéder aux liens.


    🔵 Étape 2 : Ouvrir Microsoft Edge avec Application Guard

    1. Lancez Microsoft Edge.
    2. Cliquez sur le menu à trois points → Nouvelle fenêtre Application Guard. image

    🔐 Cela ouvre une session de navigation hautement isolée.


    🔍 Étape 3 : Accéder à votre note depuis Edge sécurisé

    1. Dans la fenêtre Application Guard, ouvrez l’URL copiée à l’étape 1
      (ex. : https://notepad.libreops.cc/xyz123abc456)

    2. Une fois la note ouverte :
      • Copiez le lien suspect depuis la note.
      • Collez-le dans la barre d’adresse ou survolez-le pour l’analyser.
    3. Vous pouvez maintenant :
      • Vérifier visuellement le lien.
      • L’ouvrir uniquement si nécessaire.
      • Utiliser des outils d’analyse depuis Application Guard :

    🧽 Après utilisation

    • Fermez la fenêtre Application Guard pour détruire la session.

  • How to Configure network printer on HMI

    Setting Up a Network Printer on HMI

    Source : Link

    • Our architecture is as below: image

    Instructions: Printing via network

    • Call up the control Panel. • Open the “Printer Properties” dialog with the “Printer” icon.

    – Select the printer type “PCL Laser” under “Printer Language”.

    – Select the interface “PrintServer” under “Port”.

    – Enter the network address of the print server under “IP:Port:”.

    Note: Many printers have an integrated “print server”. This allows you to specify the address of the printer directly.

    Note the correct notation -> “IP address:port number” (colon between the IP address and port number (Link)) Example: 172.16.34.30:9100

    – Select the paper size in the “Paper Size” drop-down box.

    – Specify the orientation of the printout under “Orientation”: “Portrait” for vertical format “Landscape” for horizontal format

    – Select the print quality:

    To print in draft quality, select “Draft Mode”.

    To print in color, select “Color”.

    – Confirm the entries with “OK”.

    image

    • make sure the network configuration of the HMI is from DHCP
    • Note: if IP is set manually , do not forget to fill in the default gateway address.
  • Docker Overlay Cleanup Script

    Docker Overlay Cleanup Script

    Here is a script to help clean up Docker overlay files on an Ubuntu system running in Proxmox.

    #!/bin/bash
    
    # Define the base directory for Docker overlay files
    OVERLAY_BASE_DIR="/var/lib/docker/overlay2"
    
    # Loop through each overlay directory
    find "$OVERLAY_BASE_DIR" -type d -name "diff" | while read -r diff_dir; do
        # Define the tmp directory within each diff directory
        tmp_dir="$diff_dir/tmp"
        
        # Check if the tmp directory exists
        if [ -d "$tmp_dir" ]; then
            echo "Cleaning up temporary files in $tmp_dir"
    
            # Remove files and directories within tmp that are older than 1 day
            find "$tmp_dir" -mindepth 1 -mtime +1 -exec rm -rf {} +
        fi
    done
    
    echo "Cleanup complete."
    

    Explanation:

    • Base Directory: The script targets /var/lib/docker/overlay2, where Docker stores its overlay files.

    • Loop through Directories: It searches for directories named diff within the overlay directories. Each diff directory represents the writable layer of a Docker container.

    • Temporary Files: Within each diff directory, it looks for a tmp directory, which is typically used for temporary files.

    • Cleanup: It removes files and directories within tmp that are older than 1 day. You can adjust the -mtime +1 parameter to change the age threshold for files to be deleted.

    Important Considerations:

    • Backup: Always ensure you have backups of important data before running cleanup scripts.

    • Running Containers: Be cautious with running containers. Cleaning up files in use by active containers can cause issues.

    • Permissions: Ensure the script is run with appropriate permissions. You might need to run it with sudo.

    • Testing: Test the script in a safe environment before applying it to a production system.

    You can save this script to a file, for example, clean_docker_overlay.sh, make it executable with chmod +x clean_docker_overlay.sh, and run it with sudo ./clean_docker_overlay.sh. Adjust the script as necessary to fit your specific needs and environment.

  • Dual boot to VHDX without USB

    Automated Windows 11 Tiny Core VHDX Creator Script

    Create a lightweight Windows 11 installation in a virtual disk (VHDX) file with minimal user intervention using this comprehensive PowerShell automation script.

    Overview

    This script automates the process of creating a Windows 11 Tiny Core installation inside a VHDX file, making it perfect for virtualization, testing, or creating portable Windows environments. The process is divided into two clear phases with minimal manual intervention required.

    Features

    • Fully Automated VHDX Creation - Creates, formats, and mounts virtual disk
    • Automatic Tiny11 Builder Integration - Downloads and runs Tiny11 Builder automatically
    • Custom Boot Menu Names - Add personalized boot entry names
    • Interactive Image Selection - Choose specific Windows 11 editions
    • Two-Phase Process - Clear separation between ISO creation and disk operations
    • Comprehensive Error Handling - Detailed feedback and error management
    • Flexible Configuration - Customizable paths, sizes, and names

    Prerequisites

    Before running the script, ensure you have:

    • Administrator privileges (required for diskpart and DISM operations)
    • Windows 11 ISO file downloaded from Microsoft
    • Sufficient disk space (at least 60GB recommended)
    • PowerShell 5.1 or later

    Quick Start

    Basic Usage

    # Run with default settings
    .\Win11TinyVHDX.ps1
    

    Advanced Usage

    # Custom configuration
    .\Win11TinyVHDX.ps1 -VHDXPath "D:\VMs\MyTinyWin11.vhdx" -VHDXSizeGB 40 -VHDXLabel "TinyWindows" -BootEntryName "Win11-Custom-Build"
    

    Script Parameters

    Parameter Default Value Description
    VHDXPath E:\VHD_Store\Win11tinycore.vhdx Full path for the VHDX file
    VHDXSizeGB 50 Size of the virtual disk in GB
    VHDXLabel Win11tinycore Volume label for the virtual disk
    BootEntryName Win11TinyCore-Master Custom name in boot menu

    Process Flow

    Phase 1: Tiny11 Core ISO Creation 🔨

    1. Mount Windows 11 ISO (Manual)
      • Download Windows 11 ISO from Microsoft
      • Right-click → Mount or use Windows Explorer
    2. Specify ISO Drive Letter (Interactive)
      • Script displays available drives
      • Enter the drive letter where ISO is mounted
    3. Download Tiny11 Builder (Automated)
      • Automatically downloads from GitHub repository
      • Extracts and prepares the builder tool
    4. Create Tiny11 ISO (Automated)
      • Runs Tiny11 Builder automatically
      • Creates optimized Windows 11 ISO
    5. Mount Tiny11 ISO (Manual)
      • Mount the newly created Tiny11 ISO file

    Phase 2: Virtual Disk Creation & Image Application 💾

    1. Create VHDX Virtual Disk (Automated)
      • Uses diskpart to create expandable VHDX
      • Formats and assigns drive letter
    2. Select Windows Edition (Interactive)
      • Displays available Windows editions
      • Choose the desired edition index
    3. Apply Windows Image (Automated)
      • Uses DISM to install Windows to VHDX
      • Applies selected edition
    4. Configure Boot Manager (Automated)
      • Sets up boot configuration
      • Adds custom boot menu entry

    Sample Output

    === Windows 11 Tiny Core VHDX Creator ===
    This script will create a VHDX and install Windows 11 Tiny Core
    
    === Phase 1: Creating Tiny11 Core ISO ===
    
    Step 1: Manual steps required:
    1. Download Windows 11 ISO file
    2. Mount the Windows 11 ISO (right-click -> Mount)
    
    Step 2: Enter the drive letter where Windows 11 ISO is mounted:
    Available drives:
      D: - Windows_11_ISO
    Enter drive letter (e.g., D): D
    
    Step 3: Downloading Tiny11 Builder...
    Tiny11 Builder downloaded successfully!
    
    Step 4: Running Tiny11 Builder automatically...
    Executing Tiny11 Builder...
    Source ISO: D:\
    Tiny11 Builder completed successfully!
    
    ===============================================
        TINY11 CORE ISO CREATION COMPLETED!
    ===============================================
    
    NEXT PHASE INFORMATION:
    The script will now proceed to:
      • Create a virtual disk (VHDX) file
      • Format and prepare the virtual disk
      • Apply the Tiny11 Core image to the virtual disk
      • Configure the boot manager for the installation
    
    Virtual Disk Details:
      Path: E:\VHD_Store\Win11tinycore.vhdx
      Size: 50 GB
      Label: Win11tinycore
      Boot Entry: Win11TinyCore-Master
    
    Do you want to proceed with virtual disk creation and image application? (y/n): y
    
    === Phase 2: Creating Virtual Disk and Applying Image ===
    
    Step 7: Creating VHDX...
    VHDX created successfully and mounted as drive X:
    
    Step 8: Getting Windows image information...
    [WIM Edition List Displayed]
    Enter index number: 6
    
    Step 9: Applying Windows image...
    Windows image applied successfully!
    
    Step 10: Configuring boot manager...
    Boot manager configured successfully with custom name!
    
    === Installation Complete! ===
    

    Technical Details

    VHDX Creation Process

    The script uses diskpart commands to:

    create vdisk file="path" maximum=size type=expandable
    attach vdisk
    create part primary
    format quick label="label"
    assign letter=X
    

    Image Application

    Uses DISM (Deployment Image Servicing and Management) tool:

    dism /apply-image /imagefile:source.wim /index:N /applydir:X:\
    

    Boot Configuration

    Configures Windows Boot Manager with custom entry:

    bcdboot X:\windows /d "Custom Boot Name"
    

    Creating Child Vms with differencing disk

    New-VHD -ParentPath 'E:\VHD_Store\Win11tinycore.vhdx' -Path 'E:\VHD_Store\Android.vhdx' -Differencing
    

    Note:

    • Use the command above to create a differencing VHD. Then, use EasyBCD to add the newly created VHDX to the boot menu. Ensure that the Hyper-V Virtual Machine Management service is running.
    • Before creating the differencing disk, ensure that you have installed all necessary drivers and essential software on the parent VM. This will prevent the need to reinstall them on the child VMs.
    • Do not update the parent VM under any circumstances, as this could render the child VMs unbootable. Make sure not to boot into the parent VM after creating child vms.

    Use Cases

    1. Virtual Machine Development

    • Create lightweight VMs for testing
    • Rapid deployment of clean Windows environments
    • Resource-efficient virtualization

    2. System Recovery

    • Portable Windows environment on external drive
    • Emergency boot scenarios
    • System repair and maintenance

    3. Educational Purposes

    • Learning Windows internals
    • Understanding deployment processes
    • Teaching virtualization concepts

    4. Software Testing

    • Isolated testing environments
    • Clean OS installations for software validation
    • Multiple Windows configurations

    Benefits of Tiny11 Core

    • Reduced Size: ~2-3GB smaller than standard Windows 11
    • Faster Boot: Optimized startup performance
    • Lower Resource Usage: Minimal background processes
    • Essential Features: Keeps core Windows functionality
    • Compatibility: Full Windows 11 application support

    Troubleshooting

    Common Issues

    Script requires Administrator privileges

    Solution: Right-click PowerShell → "Run as Administrator"
    

    VHDX creation fails

    Solution: Ensure sufficient disk space and valid path
    Check: Disk permissions and available storage
    

    Tiny11 Builder download fails

    Solution: Check internet connection and GitHub accessibility
    Alternative: Download manually from https://github.com/ntdevlabs/tiny11builder
    

    Image application takes too long

    Solution: Normal behavior - DISM operations can take 15-30 minutes
    Monitor: Task Manager for disk activity
    

    Boot configuration fails

    Solution: Ensure Windows image was applied successfully
    Check: X:\windows directory exists and contains system files
    

    Performance Tips

    • Use SSD storage for faster VHDX operations
    • Allocate sufficient RAM during image application
    • Close unnecessary applications to free up system resources
    • Use wired network connection for downloads

    Security Considerations

    • Run from trusted sources - Verify script integrity
    • Administrator privileges - Understand elevation requirements
    • Antivirus exclusions - May need temporary exclusions for VHDX operations
    • Network downloads - Ensure secure connection for Tiny11 Builder

    Advanced Configuration

    Custom VHDX Locations

    # Network storage
    .\Win11TinyVHDX.ps1 -VHDXPath "\\server\vms\tiny11.vhdx"
    
    # External drive
    .\Win11TinyVHDX.ps1 -VHDXPath "F:\VirtualMachines\Win11Tiny.vhdx"
    

    Multiple Configurations

    # Development environment
    .\Win11TinyVHDX.ps1 -BootEntryName "Win11-Dev-Environment" -VHDXSizeGB 60
    
    # Testing environment  
    .\Win11TinyVHDX.ps1 -BootEntryName "Win11-Test-Lab" -VHDXSizeGB 40
    

    Script Download

    The complete PowerShell script is available below. Save it as Win11TinyVHDX.ps1 and run with Administrator privileges.

    Note: Ensure execution policy allows script execution:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
    # Windows 11 Tiny Core VHDX Creator Script
    # Requires Administrator privileges
    
    param(
        [string]$VHDXPath = "E:\VHD_Store\Win11tinycore.vhdx",
        [int]$VHDXSizeGB = 50,
        [string]$VHDXLabel = "Win11tinycore",
        [string]$BootEntryName = "Win11TinyCore-Master"
    )
    
    # Check if running as administrator
    if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
        Write-Host "This script requires Administrator privileges. Please run as Administrator." -ForegroundColor Red
        exit 1
    }
    
    Write-Host "=== Windows 11 Tiny Core VHDX Creator ===" -ForegroundColor Cyan
    Write-Host "This script will create a VHDX and install Windows 11 Tiny Core" -ForegroundColor Yellow
    Write-Host ""
    
    # Function to create VHDX using diskpart
    function Create-VHDX {
        param(
            [string]$Path,
            [int]$SizeMB,
            [string]$Label,
            [string]$DriveLetter = "X"
        )
        
        Write-Host "Creating VHDX file at: $Path" -ForegroundColor Green
        
        # Ensure directory exists
        $directory = Split-Path $Path -Parent
        if (!(Test-Path $directory)) {
            New-Item -ItemType Directory -Path $directory -Force | Out-Null
        }
        
        # Create diskpart script
        $diskpartScript = @"
    create vdisk file="$Path" maximum=$SizeMB type=expandable
    attach vdisk
    create part primary
    format quick label="$Label"
    assign letter=$DriveLetter
    exit
    "@
        
        $scriptPath = "$env:TEMP\create_vhdx.txt"
        $diskpartScript | Out-File -FilePath $scriptPath -Encoding ASCII
        
        # Run diskpart
        Write-Host "Running diskpart to create and format VHDX..." -ForegroundColor Yellow
        diskpart /s $scriptPath
        
        # Clean up
        Remove-Item $scriptPath -Force
        
        if (Test-Path "${DriveLetter}:\") {
            Write-Host "VHDX created successfully and mounted as drive ${DriveLetter}:" -ForegroundColor Green
            return $true
        } else {
            Write-Host "Failed to create or mount VHDX" -ForegroundColor Red
            return $false
        }
    }
    
    # Function to download Tiny11 Builder
    function Download-Tiny11Builder {
        $downloadPath = "$env:TEMP\tiny11builder"
        $zipPath = "$downloadPath\tiny11builder.zip"
        
        Write-Host "Downloading Tiny11 Builder..." -ForegroundColor Yellow
        
        # Create download directory
        if (!(Test-Path $downloadPath)) {
            New-Item -ItemType Directory -Path $downloadPath -Force | Out-Null
        }
        
        try {
            # Download the repository
            $url = "https://github.com/ntdevlabs/tiny11builder/archive/refs/heads/main.zip"
            Invoke-WebRequest -Uri $url -OutFile $zipPath -UseBasicParsing
            
            # Extract the zip
            Expand-Archive -Path $zipPath -DestinationPath $downloadPath -Force
            
            # Find the PowerShell script
            $scriptPath = Get-ChildItem -Path $downloadPath -Name "tiny11Coremaker.ps1" -Recurse | Select-Object -First 1
            
            if ($scriptPath) {
                $fullScriptPath = Join-Path $downloadPath $scriptPath
                Write-Host "Tiny11 Builder downloaded to: $fullScriptPath" -ForegroundColor Green
                return $fullScriptPath
            } else {
                Write-Host "Could not find tiny11Coremaker.ps1 in downloaded files" -ForegroundColor Red
                return $null
            }
        }
        catch {
            Write-Host "Failed to download Tiny11 Builder: $($_.Exception.Message)" -ForegroundColor Red
            return $null
        }
    }
    
    # Function to get Windows 11 ISO drive letter
    function Get-ISODriveLetter {
        param([string]$Prompt)
        
        Write-Host $Prompt -ForegroundColor Yellow
        Write-Host "Available drives:" -ForegroundColor Cyan
        Get-WmiObject -Class Win32_LogicalDisk | Where-Object { $_.DriveType -eq 5 } | ForEach-Object {
            Write-Host "  $($_.DeviceID) - $($_.VolumeName)" -ForegroundColor White
        }
        
        do {
            $driveLetter = Read-Host "Enter drive letter (e.g., D)"
            $driveLetter = $driveLetter.TrimEnd(':').ToUpper()
            
            if ($driveLetter -match "^[A-Z]$" -and (Test-Path "${driveLetter}:\")) {
                return $driveLetter
            } else {
                Write-Host "Invalid drive letter or drive not found. Please try again." -ForegroundColor Red
            }
        } while ($true)
    }
    
    # Function to get WIM info and let user select index
    function Get-WIMInfo {
        param([string]$ISODriveLetter)
        
        $wimFile = "${ISODriveLetter}:\sources\install.wim"
        
        if (!(Test-Path $wimFile)) {
            Write-Host "install.wim not found at $wimFile" -ForegroundColor Red
            return $null
        }
        
        Write-Host "Getting Windows image information..." -ForegroundColor Yellow
        Write-Host ""
        
        try {
            # Get WIM info
            $wimInfo = dism /get-wiminfo /wimfile:$wimFile
            $wimInfo | Write-Host
            
            Write-Host ""
            Write-Host "Please select the Windows edition index from the list above:" -ForegroundColor Yellow
            
            do {
                $index = Read-Host "Enter index number"
                if ($index -match "^\d+$" -and [int]$index -gt 0) {
                    return [int]$index
                } else {
                    Write-Host "Please enter a valid index number." -ForegroundColor Red
                }
            } while ($true)
        }
        catch {
            Write-Host "Failed to get WIM information: $($_.Exception.Message)" -ForegroundColor Red
            return $null
        }
    }
    
    # Function to apply Windows image
    function Apply-WindowsImage {
        param(
            [string]$ISODriveLetter,
            [int]$Index,
            [string]$TargetDrive = "X"
        )
        
        $wimFile = "${ISODriveLetter}:\sources\install.wim"
        $targetPath = "${TargetDrive}:\"
        
        Write-Host "Applying Windows image..." -ForegroundColor Yellow
        Write-Host "Source: $wimFile" -ForegroundColor Cyan
        Write-Host "Index: $Index" -ForegroundColor Cyan
        Write-Host "Target: $targetPath" -ForegroundColor Cyan
        Write-Host ""
        
        try {
            dism /apply-image /imagefile:$wimFile /index:$Index /applydir:$targetPath
            
            if ($LASTEXITCODE -eq 0) {
                Write-Host "Windows image applied successfully!" -ForegroundColor Green
                return $true
            } else {
                Write-Host "Failed to apply Windows image (Exit code: $LASTEXITCODE)" -ForegroundColor Red
                return $false
            }
        }
        catch {
            Write-Host "Error applying Windows image: $($_.Exception.Message)" -ForegroundColor Red
            return $false
        }
    }
    
    # Function to configure boot manager
    function Configure-BootManager {
        param(
            [string]$TargetDrive = "X",
            [string]$BootEntryName = "Win11TinyCore-Master"
        )
        
        Write-Host "Configuring boot manager..." -ForegroundColor Yellow
        Write-Host "Boot entry name: $BootEntryName" -ForegroundColor Cyan
        
        try {
            # Use /d parameter to set custom boot menu description
            bcdboot "${TargetDrive}:\windows" /d "$BootEntryName"
            
            if ($LASTEXITCODE -eq 0) {
                Write-Host "Boot manager configured successfully with custom name!" -ForegroundColor Green
                return $true
            } else {
                Write-Host "Failed to configure boot manager (Exit code: $LASTEXITCODE)" -ForegroundColor Red
                return $false
            }
        }
        catch {
            Write-Host "Error configuring boot manager: $($_.Exception.Message)" -ForegroundColor Red
            return $false
        }
    }
    
    # Main script execution
    try {
        Write-Host "=== Phase 1: Creating Tiny11 Core ISO ===" -ForegroundColor Magenta
        Write-Host ""
        
        Write-Host "Step 1: Manual steps required:" -ForegroundColor Magenta
        Write-Host "1. Download Windows 11 ISO file" -ForegroundColor Yellow
        Write-Host "2. Mount the Windows 11 ISO (right-click -> Mount)" -ForegroundColor Yellow
        Write-Host ""
        
        # Step 2: Get Windows 11 ISO drive letter
        $win11Drive = Get-ISODriveLetter -Prompt "Step 2: Enter the drive letter where Windows 11 ISO is mounted:"
        
        # Step 3: Download Tiny11 Builder
        Write-Host ""
        Write-Host "Step 3: Downloading Tiny11 Builder..." -ForegroundColor Magenta
        $tiny11Script = Download-Tiny11Builder
        
        if (!$tiny11Script) {
            throw "Failed to download Tiny11 Builder"
        }
        
        Write-Host ""
        Write-Host "Step 4: Running Tiny11 Builder automatically..." -ForegroundColor Magenta
        
        # Change to the Tiny11 Builder directory
        $tiny11Dir = Split-Path $tiny11Script -Parent
        Set-Location $tiny11Dir
        
        Write-Host "Executing Tiny11 Builder..." -ForegroundColor Yellow
        Write-Host "Source ISO: ${win11Drive}:\" -ForegroundColor Cyan
        Write-Host ""
        
        try {
            # Run the Tiny11 Builder script with the Windows 11 ISO path
            & $tiny11Script
            
            if ($LASTEXITCODE -eq 0) {
                Write-Host "Tiny11 Builder completed successfully!" -ForegroundColor Green
            } else {
                Write-Host "Tiny11 Builder finished with exit code: $LASTEXITCODE" -ForegroundColor Yellow
            }
        }
        catch {
            Write-Host "Error running Tiny11 Builder: $($_.Exception.Message)" -ForegroundColor Red
            throw "Failed to run Tiny11 Builder"
        }
        
        Write-Host ""
        Write-Host "Step 5: Manual step required:" -ForegroundColor Magenta
        Write-Host "Please mount the created Tiny11 ISO file" -ForegroundColor Yellow
        Write-Host "The ISO should be located in: $tiny11Dir" -ForegroundColor Cyan
        Write-Host ""
        
        Read-Host "Press Enter when you have mounted the Tiny11 ISO..."
        
        # Step 6: Get Tiny11 ISO drive letter
        $tiny11Drive = Get-ISODriveLetter -Prompt "Step 6: Enter the drive letter where Tiny11 ISO is mounted:"
        
        Write-Host ""
        Write-Host "===============================================" -ForegroundColor Green
        Write-Host "    TINY11 CORE ISO CREATION COMPLETED!" -ForegroundColor Green
        Write-Host "===============================================" -ForegroundColor Green
        Write-Host ""
        Write-Host "NEXT PHASE INFORMATION:" -ForegroundColor Yellow
        Write-Host "The script will now proceed to:" -ForegroundColor White
        Write-Host "  • Create a virtual disk (VHDX) file" -ForegroundColor Cyan
        Write-Host "  • Format and prepare the virtual disk" -ForegroundColor Cyan
        Write-Host "  • Apply the Tiny11 Core image to the virtual disk" -ForegroundColor Cyan
        Write-Host "  • Configure the boot manager for the installation" -ForegroundColor Cyan
        Write-Host ""
        Write-Host "Virtual Disk Details:" -ForegroundColor Yellow
        Write-Host "  Path: $VHDXPath" -ForegroundColor White
        Write-Host "  Size: $VHDXSizeGB GB" -ForegroundColor White
        Write-Host "  Label: $VHDXLabel" -ForegroundColor White
        Write-Host "  Boot Entry: $BootEntryName" -ForegroundColor White
        Write-Host ""
        
        $continue = Read-Host "Do you want to proceed with virtual disk creation and image application? (y/n)"
        if ($continue -ne 'y' -and $continue -ne 'Y') {
            Write-Host "Script terminated by user." -ForegroundColor Yellow
            exit 0
        }
        
        Write-Host ""
        Write-Host "=== Phase 2: Creating Virtual Disk and Applying Image ===" -ForegroundColor Magenta
        Write-Host ""
        
        # Step 7: Create VHDX
        Write-Host "Step 7: Creating VHDX..." -ForegroundColor Magenta
        $vhdxSizeMB = $VHDXSizeGB * 1024
        if (!(Create-VHDX -Path $VHDXPath -SizeMB $vhdxSizeMB -Label $VHDXLabel)) {
            throw "Failed to create VHDX"
        }
        
        # Step 8: Get WIM info and select index
        Write-Host ""
        Write-Host "Step 8: Getting Windows image information..." -ForegroundColor Magenta
        $selectedIndex = Get-WIMInfo -ISODriveLetter $tiny11Drive
        
        if (!$selectedIndex) {
            throw "Failed to get WIM information or select index"
        }
        
        # Step 9: Apply Windows image
        Write-Host ""
        Write-Host "Step 9: Applying Windows image..." -ForegroundColor Magenta
        if (!(Apply-WindowsImage -ISODriveLetter $tiny11Drive -Index $selectedIndex)) {
            throw "Failed to apply Windows image"
        }
        
        # Step 10: Configure boot manager
        Write-Host ""
        Write-Host "Step 10: Configuring boot manager..." -ForegroundColor Magenta
        if (!(Configure-BootManager -BootEntryName $BootEntryName)) {
            throw "Failed to configure boot manager"
        }
        
        # Success message
        Write-Host ""
        Write-Host "=== Installation Complete! ===" -ForegroundColor Green
        Write-Host "Windows 11 Tiny Core has been successfully installed to VHDX:" -ForegroundColor Green
        Write-Host $VHDXPath -ForegroundColor Cyan
        Write-Host ""
        Write-Host "You can now:" -ForegroundColor Yellow
        Write-Host "1. Detach the VHDX: diskpart -> select vdisk file=$VHDXPath -> detach vdisk" -ForegroundColor White
        Write-Host "2. Use the VHDX with Hyper-V or other virtualization software" -ForegroundColor White
        Write-Host "3. Boot from the VHDX on physical hardware (advanced)" -ForegroundColor White
        
    }
    catch {
        Write-Host ""
        Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
        Write-Host "Installation failed. Please check the error message above." -ForegroundColor Red
        exit 1
    }
    
    # Optional: Detach VHDX
    Write-Host ""
    $detach = Read-Host "Would you like to detach the VHDX now? (y/n)"
    if ($detach -eq 'y' -or $detach -eq 'Y') {
        Write-Host "Detaching VHDX..." -ForegroundColor Yellow
        
        $detachScript = @"
    select vdisk file="$VHDXPath"
    detach vdisk
    exit
    "@
        
        $scriptPath = "$env:TEMP\detach_vhdx.txt"
        $detachScript | Out-File -FilePath $scriptPath -Encoding ASCII
        diskpart /s $scriptPath
        Remove-Item $scriptPath -Force
        
        Write-Host "VHDX detached successfully!" -ForegroundColor Green
    }
    

    Conclusion

    This automated script streamlines the creation of Windows 11 Tiny Core VHDX files, making it accessible for both beginners and advanced users. The two-phase approach provides clear checkpoints and flexibility, while the comprehensive error handling ensures a smooth experience.

    Whether you’re creating virtual machines, building portable Windows environments, or setting up testing scenarios, this script provides a robust and efficient solution for your Windows 11 deployment needs.


    Last updated: June 2025 Compatible with: Windows 11, PowerShell 5.1+ Requirements: Administrator privileges, Windows 11 ISO

  • Extend Logical Volume in Ubuntu

    Steps to Extend Logical Volume in Ubuntu

    This guide outlines the steps to extend a logical volume in Ubuntu to utilize the full disk space.

    Prerequisites

    • Access to a terminal with sudo privileges
    • cloud-guest-utils package installed (for growpart)

    Steps

    Step 1: Check the Disk Layout

    Verify the current disk layout to ensure that the additional space is available and correctly recognized by the system.

    sudo fdisk -l /dev/sda
    

    Step 2: Check Volume Group

    Check the volume group to see how much free space is available.

    sudo vgdisplay
    

    Step 3: Install growpart

    If growpart is not installed, install it using the following commands:

    sudo apt update
    sudo apt install cloud-guest-utils
    

    Step 4: Extend the Partition

    Use growpart to extend the partition to include the new disk space. Replace /dev/sda and 3 with your disk and partition number if different.

    sudo growpart /dev/sda 3
    

    Step 5: Resize the Physical Volume

    Resize the physical volume to include the new space:

    sudo pvresize /dev/sda3
    

    Step 6: Extend the Logical Volume

    Extend the logical volume to use all available free space in the volume group. Replace /dev/ubuntu-vg/ubuntu-lv with your logical volume path if different.

    sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
    

    Step 7: Resize the Filesystem

    Resize the filesystem to utilize the new space. For an ext4 filesystem, use:

    sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
    

    Step 8: Verify the Changes

    Check the disk space again to ensure that the changes have taken effect:

    df -h
    

    Conclusion

    By following these steps, you should be able to extend your logical volume to utilize the full disk space available.

  • Setting Up a Weekly Cron Job for Pi-hole Gravity Updates

    Setting Up a Weekly Cron Job for Pi-hole Gravity Updates

    In this blog post, I’ll walk you through the process of setting up a weekly cron job to send an SMS notification when the Pi-hole gravity update is completed. This setup is particularly useful if you’re running Pi-hole in a Docker container and want to ensure that your cron job persists across container restarts.

    Prerequisites

    • A running Pi-hole instance in a Docker container.
    • Access to the host machine where Docker is running.
    • Basic knowledge of shell scripting and cron jobs.

    Step 1: Create the Shell Script

    First, create a shell script on the host machine that will be executed by the cron job. This script will update the Pi-hole gravity database and send an SMS notification upon successful completion.

    1. Create the Script:

      Open a text editor and create a new file named pihole_update_gravity_with_sms.sh:

      sudo nano /usr/local/bin/pihole_update_gravity_with_sms.sh
      
    2. Add the Script Content:

      Copy and paste the following content into the file:

       #!/bin/bash
         
       # Path to the Pi-hole gravity update script
       GRAVITY_SCRIPT="docker exec pihole /usr/local/bin/pihole updateGravity"
         
       # SMS API credentials
       SMS_USER="USERNAME"
       SMS_PASS="APIKEY"
       SMS_MESSAGE="Pi-hole Gravity Update Completed Successfully."
         
       echo "Starting gravity update..."
         
       # Execute the gravity update
       \$GRAVITY_SCRIPT
         
       # Check if the gravity update was successful
       if [ \$? -eq 0 ]; then
           echo "Gravity update completed successfully."
         
           # Send notification via SMS using the confirmed working syntax
           echo "Sending SMS notification..."
           /usr/bin/curl "https://smsapi.free-mobile.fr/sendmsg?user=\${SMS_USER}&pass=\${SMS_PASS}&msg=\${SMS_MESSAGE}"
         
           echo "SMS notification sent successfully."
       else
           echo "Gravity update failed. No SMS notification sent."
       fi
      
    3. Make the Script Executable:

      Change the permissions of the script to make it executable:

       sudo chmod +x /usr/local/bin/pihole_update_gravity_with_sms.sh
      

    Step 2: Add the Script to the Host’s Cron Schedule

    Next, add the script to the host’s cron schedule to run it weekly at 5:30 AM every Monday.

    1. Edit the Crontab:

      Open the crontab file for editing:

       sudo crontab -e
      
    2. Add the Cron Job Entry:

      Add the following line to the crontab file to run the script at 5:30 AM every Monday:

       30 5 * * 1 /usr/local/bin/pihole_update_gravity_with_sms.sh
      
    3. Save and Exit:

      Save the changes and exit the crontab editor.

    Step 3: Verify the Cron Job

    To ensure that the cron job is set up correctly, you can manually trigger the script and check the logs for any output or errors.

    1. Manually Run the Script:

      Execute the script manually to verify that it works as expected:

       sudo /usr/local/bin/pihole_update_gravity_with_sms.sh
      
    2. Check the Logs:

      Review the system logs to see if the script was executed and if there were any errors:

      bash sudo tail -f /var/log/syslog

    Conclusion

    By following these steps, you have successfully set up a weekly cron job to send an SMS notification upon the completion of the Pi-hole gravity update. This setup ensures that you are promptly notified of the update status, helping you maintain the efficiency of your Pi-hole instance.

  • Automount Rclone Remote at System Startup

    Automount Rclone Remote at System Startup (Using systemd)

    To automount your Rclone remote at system startup, follow these steps:


    1. Create a systemd Service Unit

    Create a systemd unit file (example: /etc/systemd/system/rclone-debridlink.service).

    [Unit]
    Description=Rclone Mount for DebridLink Seedbox
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=notify
    ExecStart=/usr/bin/rclone mount debridlink:/Seedbox /mnt/debridlink \\
      --allow-other \\
      --dir-cache-time 10s \\
      --vfs-cache-mode full \\
      --vfs-cache-max-size 500M \\
      --vfs-read-chunk-size 8M \\
      --vfs-read-chunk-size-limit 128M \\
      --vfs-fast-fingerprint \\
      --no-modtime \\
      --read-only \\
      --allow-non-empty \\
      --log-level INFO \\
      --log-file /var/log/rclone.log
    ExecStop=/bin/fusermount -u /mnt/debridlink
    Restart=on-failure
    User=<your-username>
    Group=<your-group>
    TimeoutSec=30
    
    [Install]
    WantedBy=multi-user.target
    

    Replace <your-username> and <your-group> with the appropriate values (you can find them using whoami and id -gn).


    2. Enable FUSE Permissions

    Ensure your user is part of the fuse group (if applicable):

    sudo usermod -aG fuse <your-username>
    

    Also install necessary FUSE packages (if missing):

    sudo apt install fuse3
    

    3. Enable and Start the Service

    Enable and start your systemd service:

    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl enable rclone-debridlink.service
    sudo systemctl start rclone-debridlink.service
    

    You can check the status with:

    systemctl status rclone-debridlink.service
    

    ✅ Your Rclone mount should now automatically mount on each system boot.

  • How to Set Up a Secure VPN Wi-Fi Access Point with OpenWRT and ProtonVPN (WireGuard)

    In this guide, we’ll walk through setting up an OpenWRT-based Wi-Fi access point that forces all connected clients to route their traffic through ProtonVPN using WireGuard. This ensures privacy, prevents DNS leaks, and blocks fallback to your ISP (kill switch).


    🔧 Prerequisites

    • OpenWRT-compatible router with internet access
    • OpenWRT firmware installed (with LuCI interface)
    • ProtonVPN account with WireGuard support

    1. Install Required Packages

    SSH into your OpenWRT router and run:

    opkg update
    opkg install luci-proto-wireguard wireguard-tools luci-app-wireguard kmod-wireguard
    

    2. Configure WireGuard Interface

    Use ProtonVPN’s WireGuard config generator and enter the config into:

    LuCI > Network > Interfaces > Add new interface

    • Name: wg0
    • Protocol: WireGuard VPN
    • Assign firewall zone: wgzone

    Add interface details from ProtonVPN:

    • Private key
    • Public key
    • Endpoint IP/port
    • Allowed IPs: 0.0.0.0/0
    • DNS server: 10.2.0.1 (or as provided)

    3. Create a VPN-Only Wi-Fi Network

    LuCI > Network > Wireless > Add

    • SSID: VPN-WiFi
    • Network: check vpnlan only

    Then go to Network > Interfaces > Add:

    • Name: vpnlan
    • Protocol: Static
    • IPv4 address: 192.168.100.1
    • Netmask: 255.255.255.0
    • Firewall zone: create new vpnlan

    Enable DHCP:
    Network > DHCP and DNS > Interfaces > vpnlan

    • Start: 100
    • Limit: 150
    • Lease time: 12h

    4. Configure Firewall Zones

    LuCI > Network > Firewall > Zones

    Create zones:

    • vpnlan: covers vpnlan network
      • Input: accept
      • Output: accept
      • Forward: reject
      • ✅ Masquerading
      • ✅ MSS Clamping
    • wgzone: covers wg0
      • Input: reject
      • Output: accept
      • Forward: reject
      • ✅ Masquerading

    Forwarding Rules:

    • Allow vpnlan ➝ wgzone
    • ❌ Do NOT allow vpnlan ➝ wan

    5. Force DNS Over VPN

    Network > DHCP and DNS:

    • ✅ Ignore resolv file
    • DNS Forwardings: 10.2.0.1 (or ProtonVPN DNS)

    Firewall > Traffic Rules:

    1. Allow DNS to VPN:

      • Source zone: vpnlan
      • Destination zone: wgzone
      • Destination IP: 10.2.0.1
      • Port: 53
      • ✅ Accept
    2. Block All Other DNS:

      • Source zone: vpnlan
      • Port: 53
      • ❌ Reject

    6. Test the Setup

    ✅ DNS Leak Test

    Connect to VPN-WiFi, visit https://dnsleaktest.com

    You should only see ProtonVPN DNS (e.g., 185.x.x.x in Netherlands).

    ✅ Kill Switch Test

    Temporarily bring down the VPN:

    ifdown wg0
    

    Clients on VPN-WiFi should lose all internet access.


    🔒 Result

    You now have a secure, VPN-only wireless access point. All connected devices are:

    • Protected via ProtonVPN (WireGuard)
    • Free of DNS leaks
    • Kill-switched from WAN fallback

    Enjoy secure browsing!

  • Network Drive Status CSC CACHE

    📁 Désactivation des fichiers hors connexion dans le Centre de synchronisation pour résoudre les conflits CSC CACHE

    📝 Problème

    Un lecteur réseau affiche le statut CSC CACHE, ce qui indique que les fichiers hors connexion sont activés via le Centre de synchronisation. Cela entraîne les problèmes suivants : image

    • Dossiers incomplets ou contenus manquants.
    • Conflits de fichiers ou fichiers obsolètes.
    • Impossibilité d’accéder à certains fichiers présents sur le serveur.

    ✅ Objectif

    Désactiver les fichiers hors connexion pour que le lecteur réseau reflète le contenu en temps réel sans mise en cache ni conflit.


    🔧 Étapes à suivre

    Étape 1 : Vérifier le statut dans le Centre de synchronisation

    1. Ouvrir le Panneau de configuration.
    2. Rechercher et ouvrir le Centre de synchronisation. image
    3. Dans le menu de gauche, cliquer sur Gérer les fichiers hors connexion.
    4. Vérifier le statut :
      • Si le message indique que les fichiers hors connexion sont activés, passer à l’étape suivante.

    Étape 2 : Désactiver les fichiers hors connexion

    1. Dans la fenêtre Fichiers hors connexion, cliquer sur Désactiver les fichiers hors connexion. image
    2. Cliquer sur OK.
    3. Redémarrer l’ordinateur lorsque cela est demandé.

    Étape 3 : Vider le cache CSC (optionnel mais recommandé)

    Si le lecteur réseau affiche toujours CSC CACHE ou si le problème persiste, il est conseillé de vider le cache des fichiers hors connexion.

    ⚠️ Attention : cette opération supprimera tous les fichiers en cache. S’assurer que toutes les modifications ont été synchronisées et sauvegardées.

    a. Modifier le registre pour vider le cache au redémarrage

    1. Appuyer sur Windows + R, taper regedit, puis appuyer sur Entrée.
    2. Naviguer jusqu’à la clé suivante :

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CSC
      
    3. Créer ou modifier la valeur DWORD suivante :
      • Nom : FormatDatabase
      • Valeur : 1
    4. Fermer l’Éditeur du Registre et redémarrer l’ordinateur.

    Étape 4 : Vérifier l’accès au lecteur réseau

    Après redémarrage :

    1. Ouvrir l’Explorateur de fichiers.
    2. Accéder au lecteur réseau concerné.
    3. Vérifier que :
      • Le lecteur n’indique plus CSC CACHE.
      • Tous les fichiers et dossiers sont visibles et à jour.

  • Update Portainer on Ubuntu with Docker

    Update Portainer on Ubuntu with Docker

    This script stops and removes the existing Portainer container, pulls the latest image, and restarts Portainer using Docker.

    Script: update_portainer.sh

    #!/bin/bash
    
    # Update Portainer using Docker
    
    echo "Stopping existing Portainer container..."
    docker stop portainer
    
    echo "Removing existing Portainer container..."
    docker rm portainer
    
    echo "Pulling the latest Portainer image..."
    docker pull portainer/portainer-ce:lts
    
    echo "Restarting Portainer with the latest image..."
    docker run -d \
      -p 8000:8000 \
      -p 9443:9443 \
      --name portainer \
      --restart=always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v portainer_data:/data \
      portainer/portainer-ce:lts
    
    echo "Portainer update complete."
    

    Make the Script Executable

    chmod +x update_portainer.sh
    

    Run the Script

    ./update_portainer.sh
    

    ⚠️ Adjust container name, ports, or volume paths if your setup differs.

  • Change the Metrics of the Network adapater

    Powershell script to change the metrics of the network adapter

    Some software, such as Siemens, installs virtual network adapters. By default, Windows automatically manages network metrics, which can cause delays during startup. In some cases, the system attempts to obtain a network address for the virtual adapter before the physical one, significantly delaying network availability for users. To address this issue, the following script manually sets the network metric values to prioritize the physical adapter.

    # Following pre requisites are required:
    # The network cards should be named properly 
    # Here in my scenario I have named the physical cards as Pedagogie which I could address it in the script.
    # Define the remote computer name
    $remotePC = "PC 01"
    
    # Define the adapter names and desired metric values
    $pedagogieAdapterName = "Pedagogie"
    $siemensAdapterName = "Ethernet 2"
    
    $pedagogieMetricValue = 1
    $siemensMetricValue = 100
    
    # Execute the following block remotely
    Invoke-Command -ComputerName $remotePC -ScriptBlock {
        param($pedagogieAdapterName, $siemensAdapterName, $pedagogieMetricValue, $siemensMetricValue)
    
        # Get the network adapter interfaces
        $pedagogieInterface = Get-NetAdapter -Name $pedagogieAdapterName -ErrorAction Stop
        $siemensInterface = Get-NetAdapter -Name $siemensAdapterName -ErrorAction Stop
    
        # Set the new metric values
        Set-NetIPInterface -InterfaceIndex $pedagogieInterface.ifIndex -InterfaceMetric $pedagogieMetricValue
        Set-NetIPInterface -InterfaceIndex $siemensInterface.ifIndex -InterfaceMetric $siemensMetricValue
    
        Write-Output "$comp : Metric for adapter '$pedagogieAdapterName' set to $pedagogieMetricValue."
        Write-Output "$comp : Metric for adapter '$siemensAdapterName' set to $siemensMetricValue."
    } -ArgumentList $pedagogieAdapterName, $siemensAdapterName, $pedagogieMetricValue, $siemensMetricValue
    
    
  • CRX-10 app not finding the Robot

    CRX-10 app not finding the Robot

  • Freemobile SMS API template

    ```bash

    SMS API credentials

    SMS_USER=”USERNAME” SMS_PASS=”APIKEY” SMS_MESSAGE=”Pi-hole Gravity Update Completed Successfully.”

  • MailMerge avec ThunderBird

    MailMerge avec Thunderbird

  • Nvidia Driver install

    Documentation: Clean Nvidia Driver Installation using DDU and NVCleanInstall

  • Chocolatey package automation via github workflow

    Chocolatey Package Deployment Workflow

  • Deploy the new Microsoft Teams client

    Source: link

  • Copy a desired profile to default profile

    Use defprof to copy the desired profile

  • Unable to update windows due to SSL error

    Source : https://learn.microsoft.com/en-us/answers/questions/1571547/error-connecting-to-update-service-80072f8f

  • Recover data using Duplicati

    Points to remember while recovering using Duplicati.

  • Mounting a CIFS Share in an Unprivileged LXC Container Running Docker

    This guide details how to mount a CIFS (SMB) share within an unprivileged LXC container running on Proxmox and make it accessible to a Docker container.

  • Metabase upgrade or migration to new server

    Before upgrading the system, always take a backup of the database to prevent data loss.

  • Glpi-Agent

    Ref: Doc

  • Microsoft 365 Apps activation error- Trusted Platform Module malfunctioned

    When a motherboard has been replaced, Teams may not work and could give you an error stating “Trusted Platform Module malfunctioned”

  • File Association

    Steps to Automate Setting File Associations via Group Policy Using Command Line

  • Powershell script to list the Members in the Administrateur Group

    ```powershell

    Define the list of computers

    $computers = @(“PC1”, “PC2”, “PC3”) # Replace with your actual computer names

  • Bitlocker key

    suite à une maj de juillet certains ordis peuvent demander la clef bitlocker au démarrage Voici comment retrouver une clef bitlocker à partir de l’ID dans l’AD:

  • Fog Client unable to install CA certificate Error

    During install of Fog client you might encounter the following error:

  • Topsolid Chocolatey Package Description

    Topsolid License and update configuration:

  • Registering windows apps screen appears during logon

    Registering windows apps screen appears during logon

  • Snippet for firewall rule in choco package

    Snippet for firewall rule in choco package

  • Slow startup Troubleshooting

    Slow start up can be troubleshooted via windows performance analysis tool available in windows ADK

  • Disable automatic updates of Microsoft Store apps

    Disable automatic updates of Microsoft Store apps

  • USB Devices Passthrough over IP

    USB Devices Passthrough over IP

  • Recovery Partition Parameters

    Process to hide and mark a partition as windows recovery partition

  • Kiosk JPO

    Kiosk for JPO

  • Powershell Script to Backup Hyperv VM

    This powershell Script backups the VM to Synology WORM shared Folder

  • Set Environment varaiable

    To apply settings to the current user session

    The set commands sets the variable but its not persistant after reboot

  • docker-stack-nexus

    version: '3.3'
    services:
        nexus1:
            ports:
                - '8082:8081'
            container_name: nexus1
            volumes:
                - chocolatey1-container-volume:/nexus-data
                - "/etc/timezone:/etc/timezone:ro"
                - "/etc/localtime:/etc/localtime:ro"
            image: sonatype/nexus3:latest
            networks:
                - network1
        nexus2:
            ports:
                - '8083:8081'
            container_name: nexus2
            volumes:
                - chocolatey2-container-volume:/nexus-data
                - "/etc/timezone:/etc/timezone:ro"
                - "/etc/localtime:/etc/localtime:ro"
            image: sonatype/nexus3:latest
            networks:
                - network1
    networks:
      network1:
        name: nginx-proxy-manager_default
        external: true
    volumes:
      chocolatey1-container-volume:
        external: true
        name: chocolatey1-container-volume
      chocolatey2-container-volume:
        external: true
        name: chocolatey2-container-volume
    
  • Flexlm command line switches

    License Administration Tools

  • HyperV isolated network with internet access

    HyperV isolated network with internet access

  • Container-time-and-date-settings

    Container Time and date for logs

  • Convert from Dynamic VHD/VHDX Disk Format to / from Fixed in Hyper-V

    Convert from Dynamic VHD/VHDX Disk Format to / from Fixed in Hyper-V

  • Update portainer

    To update to the latest version of Portainer Server, use the following commands to stop then remove the old version. Your other applications/containers will not be removed.

  • SSH configuration

    SSH

  • Insight Block Application and Internet

    Insight Block Application and Internet

  • MarkDown Diagrams and Charts

    Source: (Hedgedoc.org)[https://demo.hedgedoc.org/features?both]

    Diagrams

  • Add DNS Entry To Hosts File Using The Command Prompt

    How To Add DNS Entry To Hosts File Using The Command Prompt

  • Compare Dell Bios parameters between Pcs

    This Powershell script compares the parameters of Bios between Pcs

  • Chocolatey Install script snippets

    When you need to check if a file exists in the network share before proceeding with the install use Get-Item command.

    The Get-Item -path \Network-share\file.txt checks if the file is in the path, if not it raises an error that stops the chocolatey install script because of the erroractionpreferrence set at the begining of the sript.

  • Chocolatey Uninstall MSI using uninstall string

    To uninstall a package which uses MSI filetype.

  • 3Dexperince how to update Hotfix.

    How to patch the hotfix in 3Dexperience

  • TemperMonkey Script to paste Front Matter Template

    The script loads the Frontmatter template to the clipboard

    After creating new post just CTRL + V to paste the FrontMatter

  • Tia-portal-Please-reboot-before-installing-any-more-programs

    Message “Please reboot before installing any more programs”

  • Determine if MSI/EXE supports certain flag/argument

    Determine if MSI/EXE supports certain flag/argument.

  • 2023-05-10-GLPI_sql_query_for_metabase

    SELECT glpi_computers.name, glpi_infocoms.warranty_date, TIMESTAMPDIFF(YEAR, glpi_infocoms.warranty_date, CURDATE()) AS Age, MID(glpi_computers.name,8,1) AS Batiment, MID(glpi_computers.name,9,4) AS Salle FROM glpi_computers LEFT JOIN glpi_infocoms ON glpi_computers.id = glpi_infocoms.items_id WHERE ((glpi_computers.name LIKE ‘028F2%’) AND (glpi_computers.states_id=2)) ORDER BY glpi_computers.name ASC LIMIT 2;

  • How_to_Reset_MySQL_Master-Slave_Replication

    How to Reset ( Re-Sync ) MySQL Master-Slave Replication

    Source: https://tecadmin.net/reset-re-sync-mysql-master-slave-replication/

  • AutoIT Encrypt Script

    AutoIT Encrypt Script

  • Set DHCP to static for PC in Base-IP

    After importing CSV the DHCP type reflects as Regular to change the values to DHCP Static.

  • Windows_UI_Automation_with_Sikulix

    Windows UI Automation with Sikulix

  • Insight Frequently used commands

    Insight Freequently used commands

  • Chocolatey Softwares install commands

    Chocolatey Interne software install commands

  • Fog Secure Boot issue

    Fog Secure Boot issue

  • Modify BIOS settings via dell command configure winPE ISO

    Modify BIOS settings via dell command configure via winPE

  • Deploy Roboguide package

    Deploying Roboguide

    Autoit script to install Roboguide

  • Insight Tech Console Backup WOL

    Insight Tech Console Backup WOL

  • Change Vertical Menu to Horizontal Menu

    Change Vertical Menu to Horizontal Menu

  • HP BIOS Settings Management

    HP BIOS Settings Management source

  • Factory Reset your Aastra phone

    How to factory reset an Aastra 6 series

    source image

    • Applicable to Aastra 6751i, 6753i, 6755i, 6757i, 6730i, 6731i, 6739i
    • Factory Reset your Aastra phone
      • If you know the Admin Password
      • If you do not know the Admin Password Important: These phones are outdated and no longer supported by 3CX. This guide is available for informational purposes only and will not be updated
  • Reinitialiser le pc aux paramètres dusine

    Réinitialiser le pc aux paramètres d’usine

  • Powershell script to check if the software is installed on remote PC

    ``` function check-software-install() { Param ( [Parameter(Mandatory = $true)] [Array] $computers, [Parameter(Mandatory = $true)] [string] $softwarename )

  • Factory Reset Partition via Clonezilla

    AUTOMATED UEFI-WINDOWS RESTORE USING CLONEZILLA

  • PartitionWizard Clean Uninstall

    Partition Wizard Clean uninstall

  • Powershell remote install/uninstall softwares

    Powershell Function to uninstall msi remotely and get the output status

  • GLPI Upgrade

    When you would like to upgrade to the new version of Glpi

  • INITIATE SCCM CLIENT AGENT ACTIONS USING COMMAND LINE

    Credits: https://www.manishbangia.com/initiate-sccm-client-actions-cmd-line/

  • Nexus Repository For Chocolatey

    Installation:

  • DeepFreeze-Actions

    DeepFreeze Actions

  • Powershell - Onliners

    To remove appx provisioned package

  • Reinstall and re-register command for built-in Windows 10 apps

    Credit : winhelponline

  • Installing Fusioninventory Plugin

    Installez et configurez le plugin FusionInventory

  • Test-chocolatey Environment

    function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))}
    Disable-ExecutionPolicy
    Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
    Import-Module $env:ChocolateyInstall\helpers\chocolateyInstaller.psm1
    
  • Select the active network card adapter of the pc

    ``` Get-WmiObject -Class Win32NetworkAdapterConfiguration -ComputerName $env:COMPUTERNAME | where { $.IpAddress -eq ([System.Net.Dns]::GetHostByName($Inputmachine).AddressList[0]).IpAddressToString }

  • Bypass powershell execution policy

    The following script helps to bypass the execution policy in the powershell session

    function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))}
    Disable-ExecutionPolicy
    
  • Apply changes to Pc while UWF is enabled

    The following script helps to make changes on a PC with UWF Active.

    ``` Remove-Job * -Force $filter = Read-Host ‘Enter the Filter for PC::’ $comp = Get-ADComputer -SearchBase “ “ -Filter ‘Name -like $filter’|Select-Object -ExpandProperty Name | Out-GridView -PassThru

  • BSOD-INACCESSIBLE_BOOT_DEVICE

    Resolve INACCESSIBLE_BOOT_DEVICE Error

    Stage 1

    • Boot Pc from windows CD -> repair option -> command prompt;
    • for Safemode:
      bcdedit /set {default} safeboot minimal
      
    • for Safe Mode with Networking type in:
      bcdedit /set {current} safeboot network
      
    • If the pc is able to boot into safe mode, its evident that some driver or thirdparty apps is blocking the windows boot process
    • to reset the pc to boot normally :
      • use msconfig -> Boot -> disable safeboot
  • Docker-Glpi

    Install Docker Engine on Ubuntu

    Set up the repository

    Update the apt package index and install packages to allow apt to use a repository over HTTPS:

        sudo apt-get update
        
        sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    

    Add Docker’s official GPG key:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    Use the following command to set up the stable repository. To add the nightly or test repository, add the word nightly or test (or both) after the word stable in the commands below. Learn about nightly and test channels.

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

    Install Docker Engine

    Update the apt package index, and install the latest version of Docker Engine and containerd, or go to the next step to install a specific version: ``` sudo apt-get update

  • Glpi-PowerBI-Reporting

    1. Install Power BI Desktop on a machine
    2. Download the ODBC connector for MariaDB from the official site (Same principle for MySQL)
      • Note- Please install version : mariadb-connector-odbc-3.1.13-win64.msi
      • :smiling_imp: The latest version: mariadb-connector-odbc-3.1.14-win64.msi has a bug - It crashes the ODBC Data Source utility while connection.
    3. Installation classic of mariadb-connector-odbc-3.1.13-win64.msi.
    4. Click the start button and search “ODBC Data Source (64 bit)” and lauch it with admin privilege.
    5. click add and in the Create New Data Source window select the MariaDB ODBC 3.1 Driver and click on Finish button
      • image
      • Connection Name : glpi-test
    6. In the Next window Enter the requested information (in my case)
      • Server Name: IP of the server
      • Port :3306
      • User name
      • Password * image
    7. click on the button TestDSN ,If the test is successful, a message tells you so and you can choose your database -> choose Glpi from the dropdown.
      • image
    8. Open the PowerBI file and click on the refresh button on the ribbon menu, a window pops up and demands for the database password. Please fill in the respective info and thats-it.
    9. Enjoy!:smiley:
  • Delete_device_and_driver_windows10

    Delete device and driver