DSC 调用的 CMD 中的参考凭证
Reference credential in CMD called by DSC
我想知道如何在 DSC 调用的 CMD 中引用凭据。
这是我正在尝试部署的配置,但它没有收到凭据。
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
Node localhost
{
LocalConfigurationManager
{
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
ActionAfterReboot = 'ContinueConfiguration'
AllowModuleOverwrite = $true
}
Script DeployDBmoveTempDB
{
SetScript = {
$SourceFile = 'C:\DatabaseTest.dacpac'
$TargetServerName = 'localhost'
$TargetDatabaseName = 'TestDB1'
$databaseSizeSQLCMD = '200MB'
$databaseLogSizeSQLCMD = '20MB'
$tempdbSizeSQLCMD = '1900MB'
$tempdbLogSizeSQLCMD = '1900MB'
trap {
Write-Error $_
Exit 1
}
$args = @('/Action:Publish'
,"/SourceFile:$SourceFile"
,"/TargetServerName:$TargetServerName"
,"/TargetUser:$Credential.UserName"
,"/TargetPassword:$Credential"
,"/TargetDatabaseName:$TargetDatabaseName"
,"/v:databaseSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:databaseLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,"/v:tempdbSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:tempdbLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,'/p:BlockOnPossibleDataLoss=false'
)
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch {
Write-Host $_ ;
}
}
TestScript = {
Test-Path D:\TestDB1_primary.mdf
}
GetScript = { <# This must return a hash table #> }
}
}
}
但是,以下配置工作正常:
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
Node localhost
{
LocalConfigurationManager
{
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
ActionAfterReboot = 'ContinueConfiguration'
AllowModuleOverwrite = $true
}
Script DeployDBmoveTempDB
{
SetScript = {
$ErrorActionPreference = "Stop"
$SourceFile = 'C:\DatabaseTest.dacpac'
$TargetServerName = 'localhost'
$user_name = 'mySqlAdmin'
$user_pwd = 'blabla'
$TargetDatabaseName = 'TestDB1'
$databaseSizeSQLCMD = '200MB'
$databaseLogSizeSQLCMD = '20MB'
$tempdbSizeSQLCMD = '1900MB'
$tempdbLogSizeSQLCMD = '1900MB'
trap {
Write-Error $_
Exit 1
}
$args = @('/Action:Publish'
,"/SourceFile:$SourceFile"
,"/TargetServerName:$TargetServerName"
,"/TargetUser:$user_name"
,"/TargetPassword:$user_pwd"
,"/TargetDatabaseName:$TargetDatabaseName"
,"/v:databaseSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:databaseLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,"/v:tempdbSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:tempdbLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,'/p:BlockOnPossibleDataLoss=false'
)
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch {
Write-Host $_ ;
}
}
TestScript = {
Test-Path D:\TestDB1_primary.mdf
}
GetScript = { <# This must return a hash table #> }
}
}
}
DSC 配置将脚本存储为生成的 mof 中的字符串,并且默认情况下不扩展变量,因为它不知道要扩展哪些变量以及保留哪些变量作为脚本的一部分。但是,通过指定 $using:
-Scope,您可以包含配置中定义的变量。在 mof-compilcation 期间,然后将变量添加到每个 Get-/Set-/TestScript 脚本块的开头。
例如:
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
$user_name = $Credential.UserName
$user_pwd = $Credential.GetNetworkCredential().Password
Node localhost
{
Script DeployDBmoveTempDB
{
SetScript = {
$TargetDatabaseName = 'TestDB1'
$args = @(,"/TargetUser:$using:user_name"
,"/TargetPassword:$using:user_pwd"
,"/TargetDatabaseName:$TargetDatabaseName")
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch { Write-Host $_ }
}
TestScript = { Test-Path "D:\TestDB1_primary.mdf" }
GetScript = { <# This must return a hash table #> }
}
}
}
请注意,密码将以明文形式存储在 mof 文件中。 例如:
SetScript = "$user_name ='User1'\n$user_pwd ='Password1'\n \n\n $TargetDatabaseName = 'TestDB1'\n $args = @(,\"/TargetUser:$user_name\"\n
,\"/TargetPassword:$user_pwd\"\n ,\"/TargetDatabaseName:$TargetDatabaseName\") \n\n try {\n & \"C:\Program File
s (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe\" $args\n }\n catch { Write-Host $_ } \n\n ";
我想知道如何在 DSC 调用的 CMD 中引用凭据。 这是我正在尝试部署的配置,但它没有收到凭据。
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
Node localhost
{
LocalConfigurationManager
{
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
ActionAfterReboot = 'ContinueConfiguration'
AllowModuleOverwrite = $true
}
Script DeployDBmoveTempDB
{
SetScript = {
$SourceFile = 'C:\DatabaseTest.dacpac'
$TargetServerName = 'localhost'
$TargetDatabaseName = 'TestDB1'
$databaseSizeSQLCMD = '200MB'
$databaseLogSizeSQLCMD = '20MB'
$tempdbSizeSQLCMD = '1900MB'
$tempdbLogSizeSQLCMD = '1900MB'
trap {
Write-Error $_
Exit 1
}
$args = @('/Action:Publish'
,"/SourceFile:$SourceFile"
,"/TargetServerName:$TargetServerName"
,"/TargetUser:$Credential.UserName"
,"/TargetPassword:$Credential"
,"/TargetDatabaseName:$TargetDatabaseName"
,"/v:databaseSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:databaseLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,"/v:tempdbSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:tempdbLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,'/p:BlockOnPossibleDataLoss=false'
)
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch {
Write-Host $_ ;
}
}
TestScript = {
Test-Path D:\TestDB1_primary.mdf
}
GetScript = { <# This must return a hash table #> }
}
}
}
但是,以下配置工作正常:
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
Node localhost
{
LocalConfigurationManager
{
ConfigurationMode = 'ApplyOnly'
RebootNodeIfNeeded = $true
ActionAfterReboot = 'ContinueConfiguration'
AllowModuleOverwrite = $true
}
Script DeployDBmoveTempDB
{
SetScript = {
$ErrorActionPreference = "Stop"
$SourceFile = 'C:\DatabaseTest.dacpac'
$TargetServerName = 'localhost'
$user_name = 'mySqlAdmin'
$user_pwd = 'blabla'
$TargetDatabaseName = 'TestDB1'
$databaseSizeSQLCMD = '200MB'
$databaseLogSizeSQLCMD = '20MB'
$tempdbSizeSQLCMD = '1900MB'
$tempdbLogSizeSQLCMD = '1900MB'
trap {
Write-Error $_
Exit 1
}
$args = @('/Action:Publish'
,"/SourceFile:$SourceFile"
,"/TargetServerName:$TargetServerName"
,"/TargetUser:$user_name"
,"/TargetPassword:$user_pwd"
,"/TargetDatabaseName:$TargetDatabaseName"
,"/v:databaseSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:databaseLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,"/v:tempdbSizeSQLCMD=$databaseSizeSQLCMD"
,"/v:tempdbLogSizeSQLCMD=$databaseLogSizeSQLCMD"
,'/p:BlockOnPossibleDataLoss=false'
)
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch {
Write-Host $_ ;
}
}
TestScript = {
Test-Path D:\TestDB1_primary.mdf
}
GetScript = { <# This must return a hash table #> }
}
}
}
DSC 配置将脚本存储为生成的 mof 中的字符串,并且默认情况下不扩展变量,因为它不知道要扩展哪些变量以及保留哪些变量作为脚本的一部分。但是,通过指定 $using:
-Scope,您可以包含配置中定义的变量。在 mof-compilcation 期间,然后将变量添加到每个 Get-/Set-/TestScript 脚本块的开头。
例如:
configuration SQLCMD
{
param
(
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[PSCredential]
$Credential
)
Import-DscResource -ModuleName xSqlServer
$user_name = $Credential.UserName
$user_pwd = $Credential.GetNetworkCredential().Password
Node localhost
{
Script DeployDBmoveTempDB
{
SetScript = {
$TargetDatabaseName = 'TestDB1'
$args = @(,"/TargetUser:$using:user_name"
,"/TargetPassword:$using:user_pwd"
,"/TargetDatabaseName:$TargetDatabaseName")
try {
& "C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe" $args
}
catch { Write-Host $_ }
}
TestScript = { Test-Path "D:\TestDB1_primary.mdf" }
GetScript = { <# This must return a hash table #> }
}
}
}
请注意,密码将以明文形式存储在 mof 文件中。 例如:
SetScript = "$user_name ='User1'\n$user_pwd ='Password1'\n \n\n $TargetDatabaseName = 'TestDB1'\n $args = @(,\"/TargetUser:$user_name\"\n
,\"/TargetPassword:$user_pwd\"\n ,\"/TargetDatabaseName:$TargetDatabaseName\") \n\n try {\n & \"C:\Program File
s (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe\" $args\n }\n catch { Write-Host $_ } \n\n ";