如何从powershell脚本手动安装PowerShell模块

问题描述 投票:0回答:1

我在powowshell.psm1中有一个PowerShell模块,我想安装它,并立即以别名pow的形式提供。我的install.ps1将文件复制到正确的文件夹,执行Import-Module -name PowowShell -Global -Alias pow,然后检查命令是否存在通过alias与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"

OUTPUT:

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!"

现在它有效!

powershell module
1个回答
0
投票

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

有趣的是,PowerShell 5工作正常,所以我用PowerShell Core提交了一个issue - 我怀疑他们会说“规则”是你必须创建一个清单。

powowshell.psd1:

@{
RootModule = '.\powowshell.psm1'
#...
AliasesToExport = 'pow'
}
© www.soinside.com 2019 - 2024. All rights reserved.