我在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!"
现在可以了!
答案 0 :(得分:0)
我通过创建一个显式列出别名的.psd1
清单解决了我的问题。
有趣的是,PowerShell 5可以正常运行,因此我向PowerShell Core提交了issue-我怀疑他们会说“规则”是您必须创建清单。
powowshell.psd1 :
@{
RootModule = '.\powowshell.psm1'
#...
AliasesToExport = 'pow'
}