Windows - Shrink Automation

Indlæg af Hanne Mølgaard Plasc

Problem



Mit script til at skubbe størrelsen på OS partitionen, f.eks.


Resize-Partition -DiskNumber 2 -PartitionNumber 1 -Size (60GB)


Hvis jeg får en fejl, fordi windows ikke kan krympes til den ønskede størrelse ('der er ikke nok plads til at udføre handling'), så prøv


Resize-Partition -DiskNumber 2 -PartitionNumber 1 -Size (70GB)


og sløjfen fortsætter, indtil partitionen er ændret.


Spørgsmål er, hvordan indstiller jeg betingelserne ved hjælp af pwshell?

Bedste reference


Her er et overblik over, hvad du skal gøre:



  1. Indstil en variabel til den ønskede størrelse på partitionen.

  2. Loop, indtil du lykkes, eller den ønskede størrelse er den aktuelle størrelse på partitionen.

  3. Prøv at ændre størrelsen på størrelsen i variablen i loop.


    • Hvis forsøget mislykkes, skal du bruge en algoritme til at bevæge sig mod partitionens faktiske størrelse.




Her er min kode (du vil måske gemme dette til en .ps1 fil og importere den, hvis du er ny til PowerShell-funktioner.)


Function Resize-PartitionDynamic
{
    param(
    [int] $diskNumber,
    [int] $PartitionNumber,
    [long] $Size
    )

    $currentSize = $size
    $successful = $false
    $maxSize = (get-partition -DiskNumber 0 -PartitionNumber 1).size

    # Try until success or the current size is 
    # the size of the existing partition
    while(!$successful -and $currentSize -lt $maxSize)
    {
        try
        {
            Resize-Partition -DiskNumber $diskNumber -PartitionNumber $PartitionNumber -Size $currentSize -ErrorAction Stop
            $successful = $true
        }
        catch
        {
            # Record the failure and move the size
            # half way to the size of the current partition
            # feel free to change the algorithm move closer to the
            # current size to something else... 
            # there probably should be a minimum move size too
            $lastError = $\_
            $currentSize = $Size + (($maxSize - $successful)/2)             
        }
    }

    # If we weren't successful, throw the last error
    if(!$successful)
    {
        throw $lastError
    }
}


Her er et eksempel på at bruge funktionen:


Resize-PartitionDynamic -diskNumber 2 -PartitionNumber 3 -Size 456GB