Назад | Перейти на главную страницу

Powershell 2: как удалить повторяющиеся записи справки?

Я часто звоню, например:

get-help <some-command>

в Powershell 2. Для многих, но не для всех этих команд мне не отображается содержимое справки. Вместо этого я получаю дубликаты, и отображается только сам объект справки:

[PS2]> get-help remove-distributiongroup | more

Name                              Category  Synopsis
----                              --------  --------
Remove-DistributionGroup          Cmdlet    Use the Remove-DistributionGroup...
Remove-DistributionGroup          Cmdlet    Use the Remove-DistributionGroup...

Будучи полным новичком в PS, я пытаюсь обойти это, сделав что-то вроде следующего:

[PS2]> $var = get-help remove-distributiongroup
[PS2]> $var[0] | get-member
... Output ...
[PS2]> $var[0].Parameters |more
... Part of the documentation ...
[PS2]> $var[0].Synopsis |more
... Another part of the documentation ...

Пара вопросов.

Спасибо!

[ОБНОВИТЬ[:

Пробовал предложение pk, но, к сожалению, это не сработало. Вот результат при передаче через select -unique:

Name                              Category  Synopsis
----                              --------  --------
Get-DistributionGroup             Cmdlet    Use the Get-DistributionGroup cm...

У меня работает сценарий ниже, чтобы удалить повторяющиеся записи в Get-Help:

$sys32Help = Get-ChildItem -Path "C:\Windows\System32\WindowsPowerShell\v1.0\en-US\" -Filter {*help*}
$sys32ModHelp = Get-ChildItem -Path "C:\Windows\System32\WindowsPowerShell\v1.0\Modules" -Filter {*help*} -Recurse -File
$compare = Compare-Object -ReferenceObject $sys32Help -DifferenceObject $sys32ModHelp -Property name -IncludeEqual
$compEQ = $compare | where sideIndicator -eq == | Select name | %{ $_.Name }
$sys32ModHelp | ?{ $_.Name -in $compEQ } | %{ Remove-Item -Path $_.FullName -Force -ErrorAction SilentlyContinue}

Вероятно, это вызвано загрузкой дубликатов снимков PS. Если вы находитесь в командной консоли Exchange и затем загружаете оснастку управления Exchange 2010 (может быть, в сценарии?), Вы увидите эти повторяющиеся ответы на получение справки. Во время работы EMS запустите get-pssnapin и проверьте наличие оснастки E2010. Если он там, используйте remove-pssnapin, чтобы выгрузить его.

Видеть "Get-Help создает повторяющиеся темы" для получения дополнительной информации.

  1. никогда не используйте "more" в PowerShell. more использует форматировщик по умолчанию (который также использует форматная таблица).
  2. если бы вы использовали командлет Format-list, вы бы обнаружили, что get-help возвращает объект со свойством 'pssnapin' или свойством 'modulename'.

Средство форматирования по умолчанию может ввести в заблуждение, но format-list или использование командлета get-member перечислит все свойства. Готов поспорить, если вы повторно запустите команду с пользовательским форматом, вы получите: [PS2]> get-help remove-distributiongroup | выберите имя, синопсис, имя модуля, pssnapin

Name                      Category  Synopsis                            PsSnapin
----                      --------  --------                            --------
Remove-DistributionGroup  Cmdlet    Use the Remove-DistributionGroup... ASnapin
Remove-DistributionGroup  Cmdlet    Use the Remove-DistributionGroup... AnotherSnapin

(приведенный выше вывод не соответствует действительности) Но суть в том, что вы сможете увидеть, какой модуль имеет дублирующую команду.

На самом деле это не дубликат, потому что вы можете вызывать каждую команду, например, Asnapin \ Remove-DistributionGroup или AnotherSnapin \ Remove-DistributionGroup, чтобы использовать другую версию :)

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

get-help remove-distributiongroup | select -unique

Это работает?

Что это возвращает?

Test-Path -path "$pshome\Help.format.ps1xml"

Этот файл содержит форматированные представления для объектов MamlCommandHelpInfo, возвращаемых Get-Help.

Я сталкивался с некоторыми случаями, когда люди, пытающиеся запустить команду Get-Help с Exchange 2010, 2013, получали дублирующиеся списки командлетов вместо фактического содержимого справки. Скорее всего, это произошло из-за запуска сценария, загружающего PSSnapin для Microsoft.Exchange.Management.PowerShell.E2010. Вот что вы можете сделать, чтобы удалить эту конкретную и, возможно, другие повторяющиеся записи:

Чтобы быстро обойти проблему:

Просто беги: Get-Help <cmdlet name> -Category 'Function' -full

Пример:

Get-Help Get-MailboxFolderPermission -Category 'Function' -full

В противном случае, чтобы получить дополнительную информацию и решить проблему:

Эта команда показывает данные, связанные с записью справки для команды, а также возвращает имя оснастки, которое нам понадобится позже:

Get-Help Get-Mailbox | Select Name,PSSnapIn

Эта команда показывает полные данные, относящиеся к команде:

Get-Command Get-Mailbox | Select Name,CommandType

Проверьте CommandType в этом выводе. Вы, вероятно, увидите, что тип команды для одного указан как Cmdlet, а другой - как функция. Скорее всего, это произошло из-за того, что в какой-то момент оснастка управления Exchange была добавлена ​​вручную или с помощью запущенного сценария. Поскольку оболочка управления Exchange настраивает оболочку по мере необходимости, оснастка не должна быть загружена, поэтому ее следует удалить.

Используйте эту команду для удаления оснастки:

Remove-PSSnapin -Name <name of snapin from 1st command above>

Пример:

Remove-PSSnapin -Name Microsoft.Exchange.Management.PowerShell.E2010

Это удалит оснастку и оставит отдельные функции, которые загружаются при запуске командной консоли Exchange.