В основном причина этого вывода состоит в том, что Get-Help
возвращает справочную информацию о псевдониме , а не о фактическом файле , на который есть ссылка.
Уровень 0 - TL; DR
Если вы просто хотите вернуть базовую информацию c скрипта, вам понадобится небольшая функция в скрипте вашего профиля, чтобы:
- Получить псевдоним
- Определить местоположение исходного файла сценария
- Передать информацию о местоположении этого файла в
Get-Help
- Бонус: сделайте его также псевдонимом!
Например
Function Get-HelpAlias($alias){
Get-Help((Get-Alias $alias).ResolvedCommand.Source)
}
Set-Alias -Name gha -Value Get-HelpAlias
PS C:\> gha proc
Invoke-Process.ps1 [par1] [par2]
Уровень 1 - Справка по файлу сценария
Давайте разберем, что происходит:
Когда вы запустили:
Get-Help proc
Действительно, вы видите результаты поиска, так как "pro c" недостаточно уникальна для Get-Help
, чтобы однозначно идентифицировать то, что вы ищете. Указав категорию:
Get-Help proc -Category Alias
Вы получаете один результат. Вы можете увидеть это, если выбрали более «уникальный» псевдоним:
PS C:\> Set-Alias -Name zzzzzz -Value "$sourceCodePath\deploy\Invoke-Process.ps1"
PS C:\> Get-Help zzzzzz
Name : zzzzzz
Category : Alias
Synopsis : \deploy\Invoke-Process.ps1
Component :
Role :
Functionality :
Что касается того, что он возвращает, он возвращает справочную информацию о псевдониме . Вы можете ясно видеть, что это Категория - это Псевдоним, а возвращенная информация - это значение, содержащееся в Псевдониме. Вы можете увидеть, что здесь:
PS C:\Temp> Get-Alias proc
CommandType Name Version Source
----------- ---- ------- ------
Alias proc -> \deploy\Invoke-Process.ps1
Мы можем «подделать» вещи, получив псевдоним, посмотрев, что это за сценарий, на который есть ссылка, и передав строку ссылки на сценарий в Get-Help
:
Get-Help((Get-Alias proc).ResolvedCommand.Source)
Если это все, что вы хотите сделать, то вы можете также добавить функцию в сценарий вашего профиля (с псевдонимом, конечно ;-), которая делает это для любого псевдонима сценария, на который вы хотите ссылаться, например:
Function Get-HelpAlias($alias){
Get-Help((Get-Alias $alias).ResolvedCommand.Source)
}
Set-Alias -Name gha -Value Get-HelpAlias
PS C:\> gha proc
Invoke-Process.ps1 [par1] [par2]
Это TL; DR уровня 1, и он будет работать, если вы просто хотите получить информацию о базовом c скрипте.
Теперь переходим на уровень 2.
Уровень 2 - Фактическая справка
Если вы хотите, чтобы справка была полезной, вы фактически должны написать ее . В этих примерах мы приводим Get-Help
самых сложных возможных случаев, когда нет справочной информации, и это лучше всего. Для псевдонима, указывающего на сценарий без справочной информации, укажите информацию о псевдониме, поскольку это наиболее полезно. Для файла сценария без справочной информации укажите информацию о файле сценария.
Если мы на самом деле написали справочную информацию, мы получим очень другой результат. Хорошая новость заключается в том, что при написании справочной информации PowerShell это Very Easy , и вам не нужно быть «первоклассным» гражданином PowerShell, чтобы сделать это.
Самый простой способ создать справку Информацию нужно написать Справка на основе комментариев . Например, Чтобы написать Справку на основе комментариев для сценария в верхней части сценария, просто добавьте что-то вроде этого:
<#
.SYNOPSIS
Invoke-Process runs programs
.DESCRIPTION
Connects to array of computers provided, and runs scripts.
#>
param (
[string]$param1,
[string]$param2
)
......
Это простой способ добавить справку к сценарию. Тогда ваш результат (с использованием функции выше) будет выглядеть так:
PS C:\> Get-Help .\Invoke-Process.ps1
NAME
C:\Invoke-Process.ps1
SYNOPSIS
Invoke-Process runs programs
SYNTAX
C:\Invoke-Process.ps1 [[-param1] <String>] [[-param2] <String>] [<CommonParameters>]
DESCRIPTION
Connects to array of computers provided, and runs scripts.
RELATED LINKS
REMARKS
To see the examples, type: "get-help C:\Temp\asdf.ps1 -examples".
For more information, type: "get-help C:\Temp\asdf.ps1 -detailed".
For technical information, type: "get-help C:\Temp\asdf.ps1 -full".
Уровень 3 - Заставить его работать так, как должно
А как насчет командлетов? что с ними происходит? например, что произойдет, если мы передадим псевдоним gci
в Get-Help
?
PS C:\> Get-Help gci
NAME
Get-ChildItem
SYNTAX
....
Ну, это другое. Этот псевдоним не возвращается так же, как то, что произошло выше. Это действительно работает так, как я хочу. Почему мой не сделал этого ???
Это подчеркивает разницу между функциями и скриптами . В приведенных выше примерах мы пытались получить информацию о файле сценария. Это самый низкий уровень справочной функции. «Обычные» скрипты не принимают таких вещей, как параметры, и в них есть довольно скучная информация, поэтому мы делаем все возможное. Вот почему при запуске Get-Help proc
он возвращает поисковую информацию, потому что поисковая информация обычно более полезна для вас.
Функции и модули разные. Они первоклассные граждане, потому что у нас больше информации и она действительно важна. Если мы не хотим писать полный модуль (не намного сложнее, чем показано ниже), мы можем написать наш скрипт как функцию. Затем мы импортируем его в сеанс (запускаем . .\Invoke-Process.ps1
), чтобы сделать функцию доступной, и получаем потрясающую помощь:
Invoke-Process.ps1
<#
.SYNOPSIS
Invoke-Process runs programs
.DESCRIPTION
Connects to array of computers provided, and runs scripts.
.PARAMETER Servers
The array of Servers
.PARAMETER Program
Program to run
#>
Function Invoke-Process {
Param (
[string[]]$Server,
[string]$Program
)
....
}
PS C:\> . .\Invoke-Process.ps1
PS C:\> Set-Alias proc Invoke-Process
PS C:\> Get-Help proc
NAME
Invoke-Process
SYNOPSIS
Invoke-Process runs programs
SYNTAX
Invoke-Process [[-Server] <String[]>] [[-Program] <String>] [<CommonParameters>]
DESCRIPTION
Connects to array of computers provided, and runs scripts.
RELATED LINKS
REMARKS
To see the examples, type: "get-help Invoke-Process -examples".
For more information, type: "get-help Invoke-Process -detailed".
For technical information, type: "get-help Invoke-Process -full".
Просто добавив немного дополнительной информации, вы легко получите то, чего вы хотите / ожидаете от помощи.