Передача класса PSCredential в качестве параметра в модуле SqlServerDsc - PullRequest
0 голосов
/ 06 июня 2018

Я новичок в публикации, а также в PowerShell DSC и powershell в целом.Я тестирую ресурс SqlServiceAccount в модуле SqlServerDsc и не могу понять, как использовать класс PSCredential.Моя цель - иметь учетные данные в переменной, но я не могу понять, как это сделать правильно.Я посмотрел на пример и прочитал psm1 для ресурса на его github, но все еще потерян.Вот код, который я использую для его проверки, пароль и другая информация в другом скрипте, вызываемом внизу этого скрипта.Появляется окно, предлагающее мне ввести учетные данные, но я хочу, чтобы мои учетные данные были помещены в переменную, чтобы заполнить это.

Configuration SQLInstall

{param (
    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $PackagePath,

    [Parameter(Mandatory = $true)]
    [System.Management.Automation.PSCredential]
    $ServiceAccountCredential

)
Import-DscResource –ModuleName PSDesiredStateConfiguration
Import-DSCResource -ModuleName ComputerManagementDsc
Import-DSCResource -ModuleName SqlServerDsc

Node $AllNodes.where{ $_.Role.Contains("SQLENGINE") }.NodeName
{

    Log ParamLog
    {
        Message = "Running SQLInstall. PackagePath = $PackagePath"
    }

# Password info here
$password = $using:Node.Service4SQLPassword | ConvertTo-SecureString -asPlainText -Force 
$username = $using:Node.Service4SQLAccount 
$Credential = New-Object System.Management.Automation.PSCredential($username,$password)

    SqlServiceAccount SetServiceAccount_DatabaseEngine
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'DatabaseEngine'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        DependsOn      = "[Script]InstallSQLServer"
    }

    SqlServiceAccount SetServiceAccount_SQLServerAgent
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'SQLServerAgent'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        DependsOn      = "[Script]InstallSQLServer"
    }

    SqlServiceAccount SetServiceAccount_IntegrationServices
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'IntegrationServices'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        DependsOn      = "[Script]InstallSQLServer"
    }               
}}

SQLInstall -ConfigurationData C:\PowerShell_UserScripts\MyServerData.psd1 `

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Спасибо, @briantist!Теперь работает после нескольких настроек, вот решение

Configuration SQLInstall                                               
{param (
    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $PackagePath
)
Import-DscResource –ModuleName PSDesiredStateConfiguration
Import-DSCResource -ModuleName ComputerManagementDsc
Import-DSCResource -ModuleName SqlServerDsc


Node $AllNodes.where{ $_.Role.Contains("SQLENGINE") }.NodeName
{

    Log ParamLog
    {
        Message = "Running SQLInstall. PackagePath = $PackagePath"
    }


    $password = $Node.Service4SQLPassword | ConvertTo-SecureString -asPlainText -Force 
    $username = $Node.Service4SQLAccount 
    $ServiceAccountCredential = New-Object System.Management.Automation.PSCredential($username,$password)

    SqlServiceAccount SetServiceAccount_DatabaseEngine
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'DatabaseEngine'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        #DependsOn     = "[Script]InstallSQLServer"
    }

    SqlServiceAccount SetServiceAccount_SQLServerAgent
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'SQLServerAgent'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        #DependsOn     = "[Script]InstallSQLServer"
    }

    SqlServiceAccount SetServiceAccount_IntegrationServices
    {
        ServerName     = $Node.NodeName
        InstanceName   = 'MSSQLSERVER'
        ServiceType    = 'IntegrationServices'
        ServiceAccount = $ServiceAccountCredential
        RestartService = $true
        Force          = $true
        #DependsOn     = "[Script]InstallSQLServer"
    }


}                                                                 
}SQLInstall -ConfigurationData C:\PowerShell_UserScripts\MyServerData.psd1 -PackagePath "C:\PowerShell_UserScripts" 
0 голосов
/ 06 июня 2018

У вас есть обязательный параметр в вашей конфигурации, который называется $ServiceAccountCredential, который вы используете в своей конфигурации.

Но затем где-то посередине вы заполняете переменную с именем $Credential, но вы ее не используетев любом месте.Удалите это из определения Configuration (оно там не принадлежит), а затем передайте его в качестве параметра:

# Password info here
$password = $using:Node.Service4SQLPassword | ConvertTo-SecureString -asPlainText -Force 
$username = $using:Node.Service4SQLAccount 
$Credential = New-Object System.Management.Automation.PSCredential($username,$password)

Configuration SQLInstall    
{
param(
    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [String]
    $PackagePath,

    [Parameter(Mandatory = $true)]
    [System.Management.Automation.PSCredential]
    $ServiceAccountCredential

)

<# ... #>

}

SQLInstall -ConfigurationData C:\PowerShell_UserScripts\MyServerData.psd1 -ServiceAccountCredential $Credential
...