Если я получаю ошибку в PowerShell, что означают три точки “…”?

Вопрос или проблема

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

Три точки “…” в ошибках PowerShell указывают на то, что доступна дополнительная информация об ошибке, но она была опущена в отображаемом сообщении для краткости. Обычно вы можете получить полные детали ошибки, направив ошибку в командлет, такой как Format-List или Out-String.

Однако я заметил, что это не дает мне полный вывод. Есть ли что-то еще, что я могу сделать, чтобы получить полный вывод?;)

$result = Invoke-AzOperationalInsightsQuery -WorkspaceId $appId -Query $query
Invoke-AzOperationalInsightsQuery : Операция вернула недопустимый код состояния ‘NotFound’
На строке:1 символ:11

  • $result = Invoke-AzOperationalInsightsQuery -WorkspaceId $appId -Quer …
  •       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : CloseError: (:) [Invoke-AzOperationalInsightsQuery], ErrorResponseException
    • FullyQualifiedErrorId : Microsoft.Azure.Commands.OperationalInsights.Query.InvokeOperationalInsightsQuery

Смотрите $error[0] | select * для получения дополнительной информации:

dir foo3

dir : Невозможно найти путь 'C:\users\admin\foo3', потому что он не существует.
На строке:1 символ:1
+ dir foo3
+ ~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\users\admin\foo3:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand


$error[0] | select *


writeErrorStream      : True
PSMessageDetails      :
Exception             : System.Management.Automation.ItemNotFoundException: Невозможно найти путь 'C:\users\admin\foo3'
                        потому что он не существует.
                           в System.Management.Automation.SessionStateInternal.GetChildItems(String path, Boolean
                        recurse, UInt32 depth, CmdletProviderContext context)
                           в Microsoft.PowerShell.Commands.GetChildItemCommand.ProcessRecord()
TargetObject          : C:\users\admin\foo3
CategoryInfo          : ObjectNotFound: (C:\users\admin\foo3:String) [Get-ChildItem], ItemNotFoundException
FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
ScriptStackTrace      : в <ScriptBlock>, <No file>: строка 1
PipelineIterationInfo : {0, 1}

Ответ или решение

В PowerShell, когда вы получаете сообщение об ошибке, оно может быть сокращено с помощью трех точек "…", что указывает на то, что есть дополнительная информация о ошибке, которая была пропущена для краткости. Эта ситуация часто может запутывать пользователей, особенно когда требуется получить полную информацию об ошибке для её диагностики и устранения.

Если вы видите сокращённый вывод ошибки, есть несколько методов, которые могут помочь вам получить доступ к полным данным об ошибке:

  1. Использование переменной $error:
    PowerShell автоматически сохраняет информацию об ошибках в массиве $error. Чтобы получить больше информации о самой последней ошибке, вы можете использовать следующую команду:

    $error[0] | Select-Object *

    Этой командой вы получите полный объект ошибки, включая информацию, которую не показывает стандартный вывод.

  2. Вывод ошибки с помощью Format-List:
    Если вы хотите получить более структурированный вывод ошибки, вы можете воспользоваться командлетом Format-List, который предоставляет детализированный вывод. Например:

    $error[0] | Format-List -Force

    Это поможет вам увидеть дополнительные свойства объекта ошибки, такие как InvocationInfo, CategoryInfo и другие.

  3. Использование Out-String:
    Если вы все еще не видите всю необходимую информацию, вы можете использовать Out-String для полного вывода текста ошибки. Команда будет выглядеть так:

    $error[0] | Out-String -Width 4096

    Эта команда гарантирует, что текст ошибки выведен в виде строки с максимально возможной шириной, что позволяет избежать обрезки на экране.

  4. Проверка "FullyQualifiedErrorId" и "CategoryInfo":
    В выводе ошибки обычно присутствуют поля FullyQualifiedErrorId и CategoryInfo, которые предоставляют ключевую информацию о том, что произошло. Используйте это для поиска решений в официальной документации или на ресурсах, таких как Stack Overflow.

  5. Слово о Try/Catch:
    Если вы обрабатываете ошибки в скриптах, вы можете использовать блоки try/catch для перехвата ошибок и их обработки, что даст вам больше контроля над выводом и сообщениями об ошибках:

    try {
       Invoke-AzOperationalInsightsQuery -WorkspaceId $appId -Query $query
    } catch {
       Write-Host "Произошла ошибка:" -ForegroundColor Red
       $_ | Format-List -Force
    }

Следуя этим шагам, вы сможете получить доступ ко всем доступным данным об ошибках и лучше понять проблемы, с которыми сталкиваетесь в PowerShell.

Оцените материал
Добавить комментарий

Капча загружается...