我在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!"
现在它有效!
我通过创建一个明确列出别名的.psd1
清单解决了我的问题。
有趣的是,PowerShell 5工作正常,所以我用PowerShell Core提交了一个issue - 我怀疑他们会说“规则”是你必须创建一个清单。
powowshell.psd1:
@{
RootModule = '.\powowshell.psm1'
#...
AliasesToExport = 'pow'
}