如何从Powershell脚本手动安装Powershell模块

时间:2019-04-16 11:16:58

标签: powershell module

我在powowshell.psm1中有一个PowerShell模块,我想安装该模块,并可以立即使用它作为别名pow。我的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 :(得分:0)

我通过创建一个显式列出别名的.psd1清单解决了我的问题。

有趣的是,PowerShell 5可以正常运行,因此我向PowerShell Core提交了issue-我怀疑他们会说“规则”是您必须创建清单。

powowshell.psd1

@{
RootModule = '.\powowshell.psm1'
#...
AliasesToExport = 'pow'
}