Предварительная проверка сценария Powershell MBR2GPT

Прежде чем я получу лекцию, я знаю...

Но выслушай меня, а потом помоги мне!

Я собрал очень простой сценарий powershell (ради этой проблемы), чтобы попытаться просто запустить предварительную проверку с намерением изменить хост записи для дальнейших действий или выходов в зависимости от результата проверки mbr2gpt:

      $MBRVAL = (mbr2gpt /allowfullos /validate)
If($MBRVAL -like "NotSpecified: (Disk layout validation failed for disk 0"){
    write-host "Error in MBR Conversion"
}
else{
    write-host "Ready for Conversion"
}

Теперь, если вы запустили MBR2GPT, вы можете не получить эту ошибку макета диска (если вы уже не сделали это случайно)

Но ошибка заключается в том, что вы получите, если проверка не пройдена дословно, что приведет к Powershell при запуске на машине с такой ошибкой, присутствующей при проверке.

Тем не менее, «нравится» / соответствует / содержит, ни один из них не работает, и поэтому он постоянно возвращается к другому.

Теперь - фактическая ошибка - это ошибка приложения в виде строки.

      mbr2gpt : Disk layout validation failed for disk 0
At line:1 char:12
+ $MBRVAL = (mbr2gpt /allowfullos /validate)

    + CategoryInfo          : NotSpecified: (Disk layout validation failed for disk 0:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Итак, могу ли я ссылаться на это в своем сценарии как на оператор IF или нет, и если да, то как?! :D

1 ответ

Поскольку MBR2GPT.EXE является собственной командой, нам нужно проверять наличие ошибок, перенаправляя поток ошибок в поток успеха с помощью 2>&1. Если мы не добавим этот оператор перенаправления , ошибки не будут зафиксированы в переменной.

      # Redirect error stream to success stream to also capture any errors
$MBRVAL = MBR2GPT.EXE /allowfullos /validate 2>&1

# Check if any error records exist and capture these in variable $errors
If ( $errors = $MBRVAL | Where-Object { $_ -is [System.Management.Automation.ErrorRecord] }  ) {
    # we found errors.  Check the exception message for specific error
    switch -regex ($errors.Exception.Message) {
        'Disk layout validation failed for disk' { 
            Write-Host 'Disk layout validation error in MBR Conversion' -ForegroundColor Red 
        }
        Default { Write-Host 'Some other error...' -ForegroundColor Red }
    }
}
# if no errors do the following
else {
    Write-Host 'Ready for Conversion' -ForegroundColor Green
}

Итак, это была слишком сложная версия, если вам нужно выполнять обработку ошибок на основе ошибки.

Если вас не волнует, в чем ошибка, вы можете использовать более простой подход, используя $LASTEXITCODE

      MBR2GPT.EXE /allowfullos /validate
if ($LASTEXITCODE){    # or if ($LASTEXITCODE -ne 0){
    Write-Host "Some error occurred..." -ForegroundColor Red
} else {
    Write-Host "Success" -ForegroundColor Green
}

Если $LASTEXITCODE= что-нибудь кроме 0, то при последнем выполнении собственной команды произошла ошибка.

Вы также можете отреагировать на этот код возврата , основываясь на его значении.

      switch ($LASTEXITCODE) {
    0   { 'Conversion completed successfully.' }
    1   { 'Conversion was canceled by the user.' }
    2   { 'Conversion failed due to an internal error.' }
    3   { 'Conversion failed due to an initialization error.' }
    4   { 'Conversion failed due to invalid command-line parameters.' }
    5   { 'Conversion failed due to error reading the geometry and layout of the selected disk.' }
    6   { 'Conversion failed because one or more volumes on the disk is encrypted.' }
    7   { 'Conversion failed because the geometry and layout of the selected disk do not meet requirements.' }
    8   { 'Conversion failed due to error while creating the EFI system partition.' }
    9   { 'Conversion failed due to error installing boot files.' }
    10  { 'Conversion failed due to error while applying GPT layout.' }
    100 { 'Conversion to GPT layout succeeded, but some boot configuration data entries could not be restored.' }
    Default {'Undocumented error'}
}
Другие вопросы по тегам