2017-02-02 41 views
1

Мой сценарий для изменения размера раздела ОС, например.Термоусадочная автоматизация

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

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

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

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

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

+0

Что вы хотите сказать? Вы хотите знать, как увеличить размер цели шаг за шагом, пока операция не будет успешной? Похоже, вы уже знаете, что вам нужно делать, и что вы пробовали до сих пор? –

+0

Я протестировал несколько сценариев, которые не работают. Мне нужно условие if, которое автоматизирует выше. Действие заключается в изменении размера раздела, но если появляется ошибка Windows, увеличьте размер усадки. – Manu2287

ответ

0

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

  1. Установите переменную нужного размера раздела.
  2. Петля до тех пор, пока вы не добьетесь успеха или нужный размер - это текущий размер раздела.
  3. В цикле попробуйте изменить размер раздела на размер в переменной.
    • Если попытка не удалась, используйте некоторый алгоритм для перемещения к фактическому размеру раздела.

Вот мой код (вы можете сохранить это в .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 
+0

Я протестировал его и обнаружил пару ошибок, которые я исправил, но я не получил ошибку, которую вы ударили. – TravisEz13

+0

Спасибо, это ошибка, которую я получаю: system32> param ( Отсутствует ')' в списке параметров функции. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordEx ception + FullyQualifiedErrorId: MissingEndParenthesisInFunctionParameterList – Manu2287

+0

Я сохранил точный образец выше как сущность на github. Щелкните правой кнопкой мыши по [этой ссылке] (https://gist.githubusercontent.com/TravisEz13/c0e8c31e6c39351baae833a6e633b1b9/raw/34c3bccc844a1247f164f499cbe8c2d74d52e357/sd42004026.ps1) и сохраните как. В этот момент вы должны иметь файл 'sd42004026.ps1'. В PowerShell 'cd' в каталог вы сохранили файл и запустили'. . \ Sd42004026.ps1'. Вышеуказанная функция теперь должна быть в области видимости, и вы должны иметь возможность использовать ее как 'Resize-PartitionDynamic -diskNumber 3 -PartitionNumber 4 -Size (999GB)' – TravisEz13

 Смежные вопросы

  • Нет связанных вопросов^_^