Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: Windows PowerShell 4.0, Windows PowerShell 5.0
Em situações do mundo real, as configurações podem se tornar longas e complexas, chamando muitos recursos diferentes e definindo um grande número de propriedades. Para ajudar a resolver essa complexidade, você pode usar uma configuração de DSC (Configuração de Estado Desejado) do Windows PowerShell como um recurso para outras configurações. Isso é chamado de recurso composto. Um recurso composto é uma configuração DSC que usa parâmetros. Os parâmetros da configuração atuam como as propriedades do recurso.
A configuração é salva como um arquivo com uma .schema.psm1 extensão. Ele substitui o esquema MOF e o script de recurso em um recurso DSC típico. Para obter mais informações sobre recursos DSC, consulte Recursos de configuração de estado desejado do Windows PowerShell.
Criando o recurso composto
Em nosso exemplo, criamos uma configuração que invoca vários recursos existentes para configurar máquinas virtuais. Em vez de especificar os valores a serem definidos nos blocos de configuração, a configuração recebe parâmetros que são usados nos blocos de configuração.
Configuration xVirtualMachine
{
param
(
# Name of VMs
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String[]] $VMName,
# Name of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchName,
# Type of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchType,
# Source Path for VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDParentPath,
# Destination path for diff VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDPath,
# Startup Memory for VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMStartupMemory,
# State of the VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMState
)
# Import the module that defines custom resources
Import-DSCResource -ModuleName xComputerManagement,xHyper-V
# Install the Hyper-V role
WindowsFeature HyperV
{
Ensure = "Present"
Name = "Hyper-V"
}
# Create the virtual switch
xVMSwitch $SwitchName
{
Ensure = "Present"
Name = $SwitchName
Type = $SwitchType
DependsOn = "[WindowsFeature]HyperV"
}
# Check for Parent VHD file
File ParentVHDFile
{
Ensure = "Present"
DestinationPath = $VHDParentPath
Type = "File"
DependsOn = "[WindowsFeature]HyperV"
}
# Check the destination VHD folder
File VHDFolder
{
Ensure = "Present"
DestinationPath = $VHDPath
Type = "Directory"
DependsOn = "[File]ParentVHDFile"
}
# Create VM specific diff VHD
foreach ($Name in $VMName)
{
xVHD "VHD$Name"
{
Ensure = "Present"
Name = $Name
Path = $VHDPath
ParentPath = $VHDParentPath
DependsOn = @("[WindowsFeature]HyperV",
"[File]VHDFolder")
}
}
# Create VM using the above VHD
foreach($Name in $VMName)
{
xVMHyperV "VMachine$Name"
{
Ensure = "Present"
Name = $Name
VhDPath = (Join-Path -Path $VHDPath -ChildPath $Name)
SwitchName = $SwitchName
StartupMemory = $VMStartupMemory
State = $VMState
MACAddress = $MACAddress
WaitForIP = $true
DependsOn = @("[WindowsFeature]HyperV",
"[xVHD]VHD$Name")
}
}
}
Observação
Atualmente, o DSC não oferece suporte à colocação de recursos compostos ou configurações aninhadas em um recurso composto.
Salvando a configuração como um recurso composto
Para usar a configuração parametrizada como um recurso DSC, salve-a em uma estrutura de diretórios como a de qualquer outro recurso baseado em MOF e nomeie-a com uma .schema.psm1 extensão. Para este exemplo, nomearemos o arquivo xVirtualMachine.schema.psm1como . Você também precisa criar um manifesto chamado xVirtualMachine.psd1 que contenha a seguinte linha.
RootModule = 'xVirtualMachine.schema.psm1'
Observação
Isso é além de MyDscResources.psd1, o manifesto do módulo para todos os recursos na MyDscResources pasta.
Quando terminar, a estrutura de pastas deve ser a seguinte.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
O recurso agora pode ser descoberto usando o Get-DscResource cmdlet e suas propriedades podem ser detetadas por esse cmdlet ou usando o preenchimento automático do Espaço Ctrl+ no ISE do Windows PowerShell.
Usando o recurso composto
Em seguida, criamos uma configuração que chama o recurso composto. Essa configuração chama o recurso composto xVirtualMachine para criar uma máquina virtual e, em seguida, chama o recurso xComputer para renomeá-lo.
configuration RenameVM
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VM
{
VMName = "Test"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
Node "192.168.10.1"
{
xComputer Name
{
Name = "SQL01"
DomainName = "fourthcoffee.com"
}
}
}
Você também pode usar esse recurso para criar várias VMs passando uma matriz de nomes de VM para o recurso xVirtualMachine.
Configuration MultipleVms
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VMs
{
VMName = "IIS01", "SQL01", "SQL02"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
}
Suporte PsDscRunAsCredential
Observação
PsDscRunAsCredential é suportado no PowerShell 5.0 e posterior.
A propriedade PsDscRunAsCredential pode ser usada no bloco de recursos de configurações DSC para especificar que o recurso deve ser executado sob um conjunto especificado de credenciais. Para obter mais informações, consulte Executando DSC com credenciais de usuário.
Para acessar o contexto do usuário de dentro de um recurso personalizado, você pode usar a variável $PsDscContextautomática .
Por exemplo, o código a seguir gravaria o contexto do usuário sob o qual o recurso está sendo executado no fluxo de saída detalhado:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}