Всякий раз, когда Get-Help
показывает список тем, а не содержание запрошенной темы - несмотря на то, что вы указали название конкретной темы - вы можете позвонить .ToString()
на отдельные элементы списка для отображения их содержимого ; например, чтобы показать содержимое 1-го элемента:
(Get-Help about_PSReadLine)[0].ToString()
Чтобы показать их все , один за другим:
Get-Help about_PSReadLine | ForEach-Object ToString
Как вы обнаружили, переименование или удаление дубликатов файлов решает проблему постоянно; см. ниже о том, как их найти.
Однако делать это не нужно, поскольку наблюдаемое поведение, скорее всего, ошибка - см. эту проблему GitHub ; подробности ниже.
Применяется начиная с PowerShell Core 6.2.0-rc.1
Проблема связана с несколькими версиями данной концептуальной справки, доступной , из-за:
устанавливается несколько версий базового модуля PowerShell ...
и / или - в случае входящих в комплект модулей (модулей, поставляемых с PowerShell) - предустановленные файлы справки продолжают оставаться доступными даже после более новых версий встроенные модули были установлены.
- Начиная с Windows PowerShell v5.1 / PowerShell Core 6.2.0, это только опция для подмножества встроенных модулей (PSReadLine, Microsoft.PowerShell.Archive, PackageManagement, PowerShellGet).
Примечание:
Проблема с несколькими версиями , похоже, затрагивает только концептуальные разделы справки (about_*
) , которые реализованы в виде отдельных *.help.txt
файлов.
Напротив, разделы справки для командлетов данного модуля обычно доставляются как часть одного файла MAML (*-help.xml
файл, имя которого содержит имя модуля); только когда-либо одна версия таких тем считается текущей и, следовательно, ее содержимое отображается напрямую (нет списка нескольких версий).
В свете этого различающееся и неясное поведение с несколькими концептуальными разделами справки вероятно ошибка , особенно учитывая, что вы не можете сказать, какие версии перечислены предметы связаны с; на связанной ноте, для не концептуальных тем, * в настоящее время нет способа просмотреть справку других версий , которая выглядит как ограничение дизайна .
Разделы справки могут быть доставлены как часть данного модуля или, в случае встроенных модулей, в подпапках, названных для языка (например, en-US
), в той же папке, что и исполняемый файл PowerShell.
По крайней мере, в PowerShell Core установленные модули по требованию, по-видимому, также могут помещать разделы в папки Help
, которые являются аналогичными папками других папок, перечисленных в $env:PSModulePath
; в этих Help
папках концептуальные разделы справки, по-видимому, могут присутствовать как на верхнем уровне (в папках для конкретного языка), так и во вложенных папках, названных для модулей (в папках для конкретного языка) - Мне неясно, какая логика стоит за этим .
Мне неясно, каковы точные правила приоритета / порядок листинга среди нескольких версий данной справочной темы; в Windows PowerShell версия концептуальной справки, установленная вместе с powershell.exe
, кажется на первом месте, но в PowerShell Core это не так.
К сожалению, проверка свойств элементов списка не обнаруживает их исходный файл , только длина их исходного файла длина (размер в байтах).
Однако вы можете самостоятельно находить файлы справки : следующую вспомогательную функцию (более полнофункциональную версию которой можно загрузить из this Gist ) основывается на вашей собственной команде для поиска всех файлов справки по заданной концептуальной теме справки или имени модуля:
function Get-HelpFile($fileNamePart) {
Split-Path ($env:PSModulePath -split [IO.Path]::PathSeparator) |
Get-ChildItem -File -Recurse -Filter *$fileNamePart* |
Where-Object Name -match '(?:\.help\.txt|-help.xml)$'
}
# Find help source files whose name contains 'about_psreadline'
Get-HelpFile about_psreadline
Вы можете передать любую подстроку, содержащуюся в именах файлов справки, например, имена модулей, например, PSReadLine
, но учтите, что это не обязательно покажет все файлы справки, связанные с этим модулем, учитывая, что концептуальные разделы справки не обязательно содержат имя модуля, с которым они связаны.
Кроме того, некоторые имена модулей не отражаются в именах их файлов справки, в частности, модуль Microsoft.PowerShell.Core
(имя файла справки System.Management.Automation.dll-Help.xml
) и Microsoft.PowerShell.Management
(имя файла справки Microsoft.PowerShell.Commands.Management.dll-Help.xml
).
Если вы передадите вышеприведенную команду на | Select FullName, Length
, она перечислит размер файла в байтах (свойство .Length
) вместе с полным путем, который можно сопоставить с размерами, указанными, например, Get-Help about_PSReadLine | Select Length
, поэтому как сделать вывод о порядке перечисления тем.