我一直在写一个PowerShell脚本。因为我想稍微模块化/组织一下我的代码,所以我决定尝试制作一些模块来分割我的脚本。
Powershell 5.1.14393.1066
现在我有一个主脚本,它导入了它需要的模块,但它似乎找不到我的函数Is-Template-Name-Set
:
Is-Template-Name-Set : The term 'Is-Template-Name-Set' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\Users\niels\test1\TemplateScript.ps1:6 char:5
+ If (Is-Template-Name-Set) {
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Is-Template-Name-Set:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Is-Template-Name-Set
在UtilityTemplateModule中定义。模块文件(UtilityTemplateModule.psm1
):
Function Get-ScriptDirectory() {
return Split-Path $script:MyInvocation.MyCommand.Path
}
Function Is-Template-Name-Set($templateName) {
$templateName -And $templateName -is [String] -And -Not $templateName -eq ""
}
Export-ModuleMember -Function 'Get-*'
Export-ModuleMember -Function 'Is-*'
UtilityTemplateModule说明(UtilityTemplateModule.psd1
文件):
@{
ModuleVersion = '1.0'
GUID = '082fc8f7-4c7f-4d9f-84a8-b36c3610cdfe'
Author = 'Niels Bokmans'
CompanyName = 'Bluenotion'
Copyright = 'Copyright (c) 2017'
Description = 'General utilities used by the other template modules.'
# Functions to export from this module
FunctionsToExport = '*'
# Cmdlets to export from this module
CmdletsToExport = '*'
# Variables to export from this module
VariablesToExport = '*'
# Aliases to export from this module
AliasesToExport = '*'
}
我的主要脚本:
param([String]$templateName="")
Import-Module BuildTemplateModule
Import-Module CdnTemplateModule
Import-Module UtilityTemplateModule
If (Is-TemplateNameSet -templateName $templateName) {
echo "Template name is set!"
$templateId = GetTemplateId -templateName $templateName
if (-Not $templateId -eq -1) {
Restore-Packages
Run-Build-Tasks
Minify-Require-Js
Clean-Downloaded-Dependencies
Copy-Offline-Page
#Deploy $response.templateId
}
} else {
echo "Template name not set!"
exit
}
我对任何powershell工作都很陌生,我不知道为什么这个函数不被识别。我认为我做的是正确的,导出模块本身中的函数,也只是导出描述文件中的所有内容(?. psd 1文件)。
任何建议将不胜感激。
2条答案
按热度按时间pdsfdshx1#
根据你对system32 powershell模块目录的评论,我认为你可能把你的模块放在了错误的目录中。
依据:https://msdn.microsoft.com/en-us/library/dd878350(v=vs.85).aspx
$PSHome\Modules (%Windir%\System32\WindowsPowerShell\v1.0\Modules)
此位置保留给Windows附带的模块。不要将模块安装到此位置。
我建议将您的模块移动到:
或者
在这些路径中的任何一个中创建任何目录(例如,在
Documents
下,默认情况下通常不存在\WindowsPowerShell\Modules
文件夹)。或者,您可以将模块放在自定义路径中,并将该路径添加到
PSModulePath
环境变量中。xpszyzbs2#
我也有同样的问题。
我丢失了
RootModule
属性。它应该指向您的主
.psm1
文件。