Я часто звоню, например:
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 создает повторяющиеся темы" для получения дополнительной информации.
Средство форматирования по умолчанию может ввести в заблуждение, но 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.