3

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
4

0 に答える 0