Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : Windows PowerShell 4.0, Windows PowerShell 5.0
Dans des situations réelles, les configurations peuvent devenir longues et complexes, appelant de nombreuses ressources différentes et définissant un grand nombre de propriétés. Pour résoudre cette complexité, vous pouvez utiliser une configuration DSC (Desired State Configuration) Windows PowerShell comme ressource pour d’autres configurations. C’est ce qu’on appelle une ressource composite. Une ressource composite est une configuration DSC qui prend des paramètres. Les paramètres de la configuration agissent comme les propriétés de la ressource.
La configuration est enregistrée sous forme de fichier avec une .schema.psm1 extension. Il remplace à la fois le schéma MOF et le script de ressource dans une ressource DSC classique. Pour plus d’informations sur les ressources DSC, consultez Ressources de configuration de l’état souhaité de Windows PowerShell.
Création de la ressource composite
Dans notre exemple, nous créons une configuration qui appelle un certain nombre de ressources existantes pour configurer des machines virtuelles. Au lieu de spécifier les valeurs à définir dans les blocs de configuration, la configuration prend en charge les paramètres qui sont ensuite utilisés dans les blocs de configuration.
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")
}
}
}
Note
À l’heure actuelle, DSC ne prend pas en charge le placement de ressources composites ou de configurations imbriquées au sein d’une ressource composite.
Enregistrement de la configuration en tant que ressource composite
Pour utiliser la configuration paramétrée en tant que ressource DSC, enregistrez-la dans une structure de répertoires semblable à celle de n’importe quelle autre ressource MOF et nommez-la avec une .schema.psm1 extension. Pour cet exemple, nous allons nommer le fichier xVirtualMachine.schema.psm1. Vous devez également créer un manifeste nommé xVirtualMachine.psd1 qui contient la ligne suivante.
RootModule = 'xVirtualMachine.schema.psm1'
Note
Cela s’ajoute au manifeste du MyDscResources.psd1module pour toutes les ressources du MyDscResources dossier.
Lorsque vous avez terminé, la structure des dossiers doit être la suivante.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
La ressource peut désormais être détectée à l’aide de l’applet Get-DscResource de commande, et ses propriétés peuvent être détectées soit par cette applet de commande, soit à l’aide de la+ saisie semi-automatiqueCtrl Space dans l’ISE Windows PowerShell.
Utilisation de la ressource composite
Ensuite, nous créons une configuration qui appelle la ressource composite. Cette configuration appelle la ressource composite xVirtualMachine pour créer une machine virtuelle, puis appelle la ressource xComputer pour la renommer.
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"
}
}
}
Vous pouvez également utiliser cette ressource pour créer plusieurs machines virtuelles en transmettant un tableau de noms de machines virtuelles à la ressource 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"
}
}
}
Prise en charge de PsDscRunAsCredential
Note
PsDscRunAsCredential est pris en charge dans PowerShell 5.0 et versions ultérieures.
La propriété PsDscRunAsCredential peut être utilisée dans le bloc de ressources de configurations DSC pour spécifier que la ressource doit être exécutée sous un ensemble spécifié d’informations d’identification. Pour plus d’informations, consultez Exécution de DSC avec les informations d’identification de l’utilisateur.
Pour accéder au contexte utilisateur à partir d’une ressource personnalisée, vous pouvez utiliser la variable $PsDscContextautomatique .
Par exemple, le code suivant écrit le contexte utilisateur dans lequel la ressource s’exécute dans le flux de sortie détaillé :
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}