tgoop.com/sterkin_ru/1009
Last Update:
▶️ Маленькая функция #PowerShell для преобразования кодов ошибок в понятный текст
На форум пришел человек с проблемой установки MS Office MSI. Коллеги запросили лог и увидели там:Note: 1: 2203 2: C:\Windows\Installer\inprogressinstallinfo.ipi 3: -2147287037
Такие коды с отрицательным значением попадаются в ошибках приложений, журналах событий, логах Windows Installer и т.п.
У меня в профиле PowerShell ($profile
) давно лежала функция Convert-Error
для преобразования кодов ошибок с помощью утилиты certutil
, я рассказывал про нее в блоге.
После публикации первой версии этого поста Вадимс Поданс доставил, что в функции лишняя конвертация в шестнадцатеричное значение, поскольку это встроено в PowerShell. Оптимальный вариант:Function Convert-Error
([int]$Err)
{certutil -error $Err}
Вызывается так:Convert-Error -2147287037
Результат на картинке↓ Windows Installer ожидал наличия папки %windir%\Installer, но ее не оказалось. Особо талантливый пользователь удалил за ненадобностью 🙉 После создания папки Office установился.
Применение функции не ограничивается кодами с отрицательным значением, попробуйте:Convert-Error 0x80070005
Convert-Error 5
(Для чисел до 9999 по умолчанию предполагается префикс 0х8007
)
Мне также доставили, что можно обойтись без certutil:$iErrorCode = -2147287037
(New-Object -TypeName System.ComponentModel.Win32Exception($iErrorCode)).Message
Однако certutil универсальнее, поскольку умеет обрабатывать ошибки из других библиотек, например, wininet.dll. Если очень хочется без certutil, у Поданса есть и такой скрипт, но это уже above my paygrade ✌️
BY Windows 11, 10, etc - Вадим Стеркин

Share with your friend now:
tgoop.com/sterkin_ru/1009