4 つの .psm1 ファイルで構成される Powershell モジュールがあります。
- DatabaseUserManagement.psm1 - パブリック コマンドレットのほとんどが含まれています。
- PermissionControl.psm1 - 最終的な公開コマンドレットが含まれています。
- ErrorHandling.psm1 - プライベート エラー処理関数が含まれています。
- ヘルパー関数 - 約 10 個の小さなプライベート ヘルパー関数が含まれています。
何らかの理由で、PermissionControl.psm1 (Set-UserPermission) の関数はヘルパー関数を認識できないようです:
わかりやすくするためにコメントを追加
PermissionControl.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
...
)
データベースユーザー管理.psm1
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 (前のコードで言及されているもののみ)
Function Get-SAMAccountName([string]$LogonName)
{
Write-Output('{0}\{1}' -f (Get-DomainName), $LogonName)
}
Function Get-Login([string]$SAMAccountName)
{
Write-Output((Get-Server).Logins[$SAMAccountName])
}
Function Get-User([Microsoft.SqlServer.Management.Smo.Login]$Login)
{
Write-Output((Get-Database).Users[($Login.GetDatabaseUser((Get-Database).Name))])
}
Function Get-Server()
{
Write-Output((New-Object Microsoft.SqlServer.Management.Smo.Server (Get-ServerInstanceName)))
}
Function Get-Database()
{
Write-Output((Get-Server).Databases[(Get-DatabaseName)])
}
データベースユーザー管理.psd1
@{
ModuleToProcess = 'DatabaseUserManagement.psm1'
ModuleVersion = '1.0.1'
GUID = 'bd4390dc-a8ad-4bce-8d69-f53ccf8e4163'
Author = 'removed'
CompanyName = 'removed'
Copyright = 'removed'
Description = 'removed'
PowerShellVersion = '2.0'
DotNetFrameworkVersion = '4.0'
ProcessorArchitecture = 'amd64'
RequiredAssemblies = @(
'Microsoft.SqlServer.Smo.dll'
)
NestedModules = @(
'ErrorHandling.psm1'
,'PermissionControl.psm1'
,'HelperFunctions.psm1'
)
FunctionsToExport = @(
'Add-DatabaseUser'
,'Get-DatabaseUser'
,'Get-DatabaseUserInformation'
,'Remove-DatabaseUser'
,'Set-UserPermission'
)
PrivateData = @{
DatabaseName = 'removed'
;DomainName = 'removed'
;ServerInstancename = 'removed'
}
}
私が得るエラーは次のとおりです。
Get-SAMAccountName : The term 'Get-SAMAccountName' 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 G:\My Documents\WindowsPowerShell\Modules\databaseusermanagement\PermissionControl.psm1:52 char:21
+ $SamAccountName = (Get-SAMAccountName $LogonName)
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-SAMAccountName:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException