在 SqlServerDsc 模块中将 PSCredential Class 作为参数传递
Passing PSCredential Class as parameter in SqlServerDsc module
我是发帖的新手,也是 powershell DSC 和 powershell 的新手。我正在测试 SqlServerDsc 模块中的 SqlServiceAccount 资源,但不知道如何使用 PSCredential Class。我的目标是在变量中拥有凭据,但无法弄清楚如何正确地做到这一点。我查看了示例并阅读了 psm1 中的 github 资源,但仍然丢失了。
这是我用来测试它的代码,密码以及其他信息位于另一个脚本中,该脚本在该脚本的底部被调用。 window 提示我输入凭据弹出,但我希望将我的凭据放在变量中以填充它。
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 `
您的配置中有一个名为 $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
谢谢@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"
我是发帖的新手,也是 powershell DSC 和 powershell 的新手。我正在测试 SqlServerDsc 模块中的 SqlServiceAccount 资源,但不知道如何使用 PSCredential Class。我的目标是在变量中拥有凭据,但无法弄清楚如何正确地做到这一点。我查看了示例并阅读了 psm1 中的 github 资源,但仍然丢失了。 这是我用来测试它的代码,密码以及其他信息位于另一个脚本中,该脚本在该脚本的底部被调用。 window 提示我输入凭据弹出,但我希望将我的凭据放在变量中以填充它。
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 `
您的配置中有一个名为 $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
谢谢@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"