Автоматизация термоусадки

Мой сценарий для изменения размера раздела ОС, например

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

Если я получаю сообщение об ошибке из-за того, что окна не могут сжаться до желаемого размера («недостаточно места для выполнения действия»), попробуйте

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

и цикл продолжается до тех пор, пока размер раздела не будет изменен.

Вопрос в том, как установить условия с помощью pwshell?


person Manu2287    schedule 02.02.2017    source источник
comment
Какой у Вас вопрос? Вы хотите знать, как шаг за шагом увеличивать целевой размер, пока операция не будет успешной? Мне кажется, вы уже знаете, что вам нужно делать, так что вы пробовали до сих пор?   -  person Ansgar Wiechers    schedule 02.02.2017
comment
Я протестировал несколько скриптов, которые не работают. Мне нужно условие if, которое автоматизирует вышеуказанное. Действие состоит в том, чтобы изменить размер раздела, но если появляется ошибка Windows, увеличьте размер сжатия.   -  person Manu2287    schedule 02.02.2017


Ответы (1)


Вот обзор того, что вам нужно сделать:

  1. Установите переменную на желаемый размер раздела.
  2. Повторяйте цикл до тех пор, пока не добьетесь успеха или пока желаемый размер не будет соответствовать текущему размеру раздела.
  3. In the loop, try to resize the partition to the size in the variable.
    • If the attempt fails, use some algorithm to move toward the actual size of the partition.

Вот мой код (вы можете сохранить его в файл .ps1 и импортировать его, если вы новичок в функциях PowerShell.)

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
person TravisEz13    schedule 02.02.2017
comment
Я протестировал его и обнаружил пару ошибок, которые я исправил, но я не получил ту ошибку, с которой вы столкнулись. - person TravisEz13; 02.02.2017
comment
Спасибо, я получаю именно эту ошибку: system32 ›param (Missing ')' в списке параметров функции. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordEx ception + FullyQualifiedErrorId: MissingEndParenthesisInFunctionParameterList - person Manu2287; 02.02.2017
comment
Я сохранил точный образец выше как суть на github. Щелкните правой кнопкой мыши в качестве ссылки. На этом этапе у вас должен быть файл sd42004026.ps1. В PowerShell cd перейдите в каталог, в котором вы сохранили файл, и запустите . .\sd42004026.ps1. Вышеупомянутая функция теперь должна быть в области видимости, и вы сможете использовать ее как Resize-PartitionDynamic -diskNumber 3 -PartitionNumber 4 -Size (999GB) - person TravisEz13; 02.02.2017
comment
Спасибо за любезную поддержку. - person Manu2287; 06.02.2017