sergey vasin

The IT blog

Очищаем историю PowerShell от команд, вызвавших ошибку – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает, как удалить ошибочные команды из истории команд Windows PowerShell.

Исследуем объект ошибки

Microsoft PowerShell MVP Jim Christopher (президент Charlotte Windows PowerShell user group) создал лабораторную работу с использованием написанного им провайдера SQLite. Это переросло в отличную практическую работу по использованию провайдеров. В процессе выступления я предложит просмотреть объект ошибки и рассказал, что если вы передадите его командлету Format-List с аргументом “*” и параметром –Force, то сможете получить дополнительную информацию.

Ниже приведен пример с использованием переменной $error[0], которая всегда выдает самую последнюю ошибку.

$error[0] | Format-List * -Force

Команда и ее вывод приведены на рисунке.

01

Мы видим, что свойство InvocationInfo содержит объект. Я могу обратиться к нему напрямую.

$Error[0].InvocationInfo

02

Теперь, если я воспользуюсь командлетом Get-History для отображения истории команд, я могу увидеть несколько ошибочных команд в списке. Их присутствие доставляет некоторые неудобства при использовании кнопок со стрелками вверх и вниз для вызова предыдущих команд.

03

Очищаем ошибочные команды

Для того, чтобы удалить все ошибочные команды из списка, я сначала передам содержимое переменной $error командлету Foreach-Object (% — его алиас). Внутри скрипт-блока я использую командлет Where-Object (? – его алиас) для получения объектов ошибки со свойством HistoryID больше нуля.

После их нахождения, я еще раз передам свойство HistoryID командлету Foreach-Object. Внутри него я использую командлет Clear-History для удаления ошибочной команды из списка. Полная команда приведена ниже.

$Error | % { $_.invocationinfo.historyid} | ? {$_ -gt 0} | % {clear-history -id $_}

Еще раз вызвав командлет Get-History, я вижу, что большинство ошибочных команд исчезли.

04

Однако, некоторые ошибки, в частности те, которые вызваны попыткой обращения к статическому методу несуществующего типа, по-прежнему в списке. Причина в том, что этот вид ошибок не содержит номера команды в истории. Вместо этого указывается значение -1.

15:06 C:\> $Error[0].InvocationInfo

MyCommand :

BoundParameters : {}

UnboundArguments : {}

ScriptLineNumber : 1

OffsetInLine : 1

HistoryId : -1

ScriptName :

Line : [int8]::minvalue

PositionMessage : At line:1 char:1

+ [int8]::minvalue

+ ~~~~~~~~~~~~~~~~

PSScriptRoot :

PSCommandPath :

InvocationName :

PipelineLength : 0

PipelinePosition : 0

ExpectingInput : False

CommandOrigin : Internal

DisplayScriptPosition :

Однако, в любом случае, это достаточно полезная возможность, идея которой пришла ко мне во время посещения Charlotte Windows PowerShell user group. Я даже подумал, что было бы неплохо добавить в мой профиль функцию Remove-BadHistoryEntry. И на самом деле я уже написал ее и загрузил в Scripting Guys Script Repository.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/02/11/cleanup-your-powershell-history-to-remove-error-entries.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Апрель 1, 2013 в 11:15

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s