Как установить модуль powershell вручную из сценария powershell - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть модуль PowerShell в powowshell.psm1, который я хочу установить и сразу же доступен как псевдоним pow.My install.ps1 копирует файл в правильную папку, делает Import-Module -name PowowShell -Global -Alias pow, а затем проверяет, существует ли команда с помощью псевдонима с Get-Command "pow", который возвращает команду.

Проблема в том, как только install.ps1 завершает работу модуля доступно только через полное имя Invoke-PowowShell, а не через увы pow.

Если я потом запишу точно такой же код Import-Module, с или без -Alias У меня вдругpow.

Почему мой модуль не сразу доступен как pow, а только как Invoke-PowowShell.

Перезапуск PowerShell не помогает.

powowshell.psm1

function Invoke-PowowShell {
    [CmdletBinding(SupportsShouldProcess)]
    [Alias('pow')]
    #...code here...
    "You have the POWer!"
}
Export-ModuleMember -Function Invoke-PowowShell -Alias pow

install.ps1 :

    # Copy .psm1 to correct modules folder /PowowShell/PowowShell.psm1
    # ...
    # Install module globally
    Write-Verbose "Import-Module -name PowowShell -Global -Alias pow"
    Import-Module -name PowowShell -Global -Alias pow
    # Check we have the "pow" alias available
    write-verbose 'Get-Command "pow"'
    $PowowShell = Get-Command "pow"
    write-verbose "`$PowowShell=$PowowShell"

ВЫХОД:

Installing PowowShell module to C:\Users\me\Documents\PowerShell\Modules ...
VERBOSE: Import-module -name PowowShell -Global
VERBOSE: Loading module from path
'C:\Users\me\Documents\PowerShell\Modules\PowowShell\PowowShell.psm1'.
VERBOSE: Exporting function 'Invoke-PowowShell'.
VERBOSE: Exporting alias 'pow'.
VERBOSE: Importing alias 'pow'.
VERBOSE: Get-Command "pow"
VERBOSE: $PowowShell=pow
Yep, the 'pow' is CmdLet installed
 Type 'pow help' for a list of commands

PS W:\powershell\powowshell> pow help
pow : The term 'pow' is not recognized as the name of a cmdlet, function, script file, or operable program.

PS W:\powershell\powowshell> Get-Command Invoke-PowowShell

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Invoke-PowowShell                                  0.0        PowowShell

Так что ничего не работает и тогда я вручную Import-Module ...

PS W:\powershell\powowshell> Import-Module -name PowowShell -Global
PS W:\powershell\powowshell> pow
"You have the POWer!"

Теперь это работает!

1 Ответ

0 голосов
/ 16 апреля 2019

Я решил свою проблему, создав манифест .psd1, в котором явно указан псевдоним.

Интересно, что PowerShell 5 работает нормально, поэтому я подал проблему с PowerShell Core - я подозреваю, что они скажут, что «правило» заключается в том, что вы должны создать манифест.

powowshell.psd1

@{
RootModule = '.\powowshell.psm1'
#...
AliasesToExport = 'pow'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...