Powershell 嵌套模块中无法识别模块帮助器函数
我有一个由4.psm1文件组成的Powershell模块:Powershell 嵌套模块中无法识别模块帮助器函数,powershell,helper,powershell-module,Powershell,Helper,Powershell Module,我有一个由4.psm1文件组成的Powershell模块: DatabaseUserManagement.psm1-包含我的大多数公共cmdlet PermissionControl.psm1-包含最终的公共cmdlet ErrorHandling.psm1-包含一个专用错误处理函数 助手函数-包含大约10个小型私人助手函数 无论出于何种原因,PermissionControl.psm1(Set UserPermission)中的函数似乎无法看到任何帮助程序函数: 为清晰起见添加了评论 Pe
- DatabaseUserManagement.psm1-包含我的大多数公共cmdlet
- PermissionControl.psm1-包含最终的公共cmdlet
- ErrorHandling.psm1-包含一个专用错误处理函数李>
- 助手函数-包含大约10个小型私人助手函数
Function Set-UserPermission
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$Area and [string]$Permissions
)
$SamAccountName = (Get-SAMAccountName $LogonName) # Fails, can't find cmdlet.
$Login = (Get-Login $SamAccountName) # Ditto
$User = (Get-User $Login) # Ditto
...
)
Function Add-DatabaseUser
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$UserName = '' and [switch]$FullAccess
)
$SAMAccountName = (Get-SAMAccountName $LogonName) # Works
$Server = Get-Server # Ditto
$Database = Get-Database # Ditto
...
)
DatabaseUserManagement.psm1
Function Set-UserPermission
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$Area and [string]$Permissions
)
$SamAccountName = (Get-SAMAccountName $LogonName) # Fails, can't find cmdlet.
$Login = (Get-Login $SamAccountName) # Ditto
$User = (Get-User $Login) # Ditto
...
)
Function Add-DatabaseUser
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$UserName = '' and [switch]$FullAccess
)
$SAMAccountName = (Get-SAMAccountName $LogonName) # Works
$Server = Get-Server # Ditto
$Database = Get-Database # Ditto
...
)
HelperFunctions.psm1(仅限于前面代码中提到的那些)
DatabaseUserManagement.psd1
Function Set-UserPermission
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$Area and [string]$Permissions
)
$SamAccountName = (Get-SAMAccountName $LogonName) # Fails, can't find cmdlet.
$Login = (Get-Login $SamAccountName) # Ditto
$User = (Get-User $Login) # Ditto
...
)
Function Add-DatabaseUser
{
[CmdletBinding()]
Param(
# 3 parameters here. [string]$LogonName, [string]$UserName = '' and [switch]$FullAccess
)
$SAMAccountName = (Get-SAMAccountName $LogonName) # Works
$Server = Get-Server # Ditto
$Database = Get-Database # Ditto
...
)
@{
ModuleToProcess='DatabaseUserManagement.psm1'
ModuleVersion='1.0.1'
GUID='bd4390dc-a8ad-4bce-8d69-f53ccf8e4163'
作者='removed'
公司名称='已删除'
版权='删除'
Description='已删除'
PowerShellVersion='2.0'
DotNetFrameworkVersion='4.0'
ProcessorArchitecture='amd64'
所需组件=@(
'Microsoft.SqlServer.Smo.dll'
)
嵌套模块=@(
'ErrorHandling.psm1'
,“PermissionControl.psm1”
,'HelperFunctions.psm1'
)
功能导出=@(
“添加数据库用户”
,“Get-DatabaseUser”
,“Get-DatabaseUserInformation”
,'Remove-DatabaseUser'
,“设置用户权限”
)
私有数据=@{
数据库名称='已删除'
;域名='removed'
;ServerInstancename=“已删除”
}
}
我得到的错误如下:
Get-SAMAccountName:术语“Get-SAMAccountName”未被识别为名称
指cmdlet、函数、脚本文件或可操作程序。检查单词的拼写
名称,或者如果包含路径,请验证路径是否正确,然后重试
再一次。
位于G:\My Documents\WindowsPowerShell\Modules\databaseusermanagement\PermissionControl.psm1:52 char:21
+$SamAccountName=(获取SamAccountName$LogonName)
+ ~~~~~~~~~~~~~~~~~~
+CategoryInfo:ObjectNotFound:(Get-SAMAccountName:String)[],CommandNotFoundException
+FullyQualifiedErrorId:CommandNotFoundException
PermissionControl.psm1
不导入HelperFunctions.psm1
,因此当然PermissionControl.psm1
中的函数不能使用HelperFunctions.psm1
中的函数。所有嵌套模块都相互独立。只有当根模块显式导出嵌套模块成员或根模块忽略Export ModuleMember命令时,才会将嵌套模块的成员导入调用方的会话状态。默认情况下,这将导出所有命令,包括来自嵌套模块的命令。因此,在DatabaseUserManagement.psd1的functionstoexport表中添加Get-SAMAccountName应该可以导入模块(连接路径$PSScriptRoot HelperFunctions.psm1)
@Kayasax在这种情况下,您只需将helper函数公开到全局范围。和PermissionControl.psm1
将从全局范围使用该助手函数。如果有人在全局范围内重新定义了Get-SAMAccountName
,那么PermissionControl.psm1
将使用重新定义的版本,而DatabaseUserManagement.psm1
将使用从HelperFunctions.psm1
导入的旧版本。