收缩自动化

Shrink Automation

我的脚本推送 OS 分区调整大小,例如

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

如果因为 windows 无法缩小到所需大小 ("there is not enough space to perform action") 而出现错误,请尝试

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

循环一直进行,直到调整分区大小。

问题是如何使用 pwshell 设置条件?

以下是您需要执行的操作的概述:

  1. 将变量设置为所需的分区大小。
  2. 循环直到成功或所需大小为分区的当前大小。
  3. 在循环中,尝试将分区大小调整为变量中的大小。
    • 如果尝试失败,使用某种算法向分区的实际大小移动。

这是我的代码(如果您不熟悉 PowerShell 函数,您可能希望将其保存到 .ps1 文件并导入它。)

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
    }
}

下面是一个使用函数的例子:

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