-
Notifications
You must be signed in to change notification settings - Fork 64
Open
Description
Problem description
Seems that files are not copied to vhdx
I got a vhdx with windows server already installed on it.
When i run the DSC configuration seems okee but files are not found on the VHDX
Resources to be copied are located on Hyper v host C:\DSCConfigs
Need to be copied inside VHDX C:\Temp
Verbose logs
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' = SendConfigurationApply,'className' =
MSFT_DSCLocalConfigurationManager,'namespaceName' = root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer HOST01 with user sid S-1-5-21-3317971597-1648635444-1937067796-500.
VERBOSE: [HOST01]: LCM: [ Start Set ]
VERBOSE: [HOST01]: LCM: [ Start Resource ] [[VhdFile]FileCopy]
VERBOSE: [HOST01]: LCM: [ Start Test ] [[VhdFile]FileCopy]
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Alias
VERBOSE: [HOST01]: [[VhdFile]FileCopy] C
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Cert
VERBOSE: [HOST01]: [[VhdFile]FileCopy] D
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Env
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Function
VERBOSE: [HOST01]: [[VhdFile]FileCopy] HKCU
VERBOSE: [HOST01]: [[VhdFile]FileCopy] HKLM
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Variable
VERBOSE: [HOST01]: [[VhdFile]FileCopy] WSMan
VERBOSE: [HOST01]: [[VhdFile]FileCopy] :\
VERBOSE: [HOST01]: [[VhdFile]FileCopy] SourcePath => C:\DSCConfigs\*
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Type => Directory
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Ensure => False
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Content =>
VERBOSE: [HOST01]: [[VhdFile]FileCopy] DestinationPath => C:\Temp
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Force => True
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Attributes =>
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Recurse => True
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Testing the file with relative VHD destination C:\Temp
VERBOSE: [HOST01]: [[VhdFile]FileCopy] Test returned True
VERBOSE: [HOST01]: LCM: [ End Test ] [[VhdFile]FileCopy] in 0.8860 seconds.
VERBOSE: [HOST01]: LCM: [ Skip Set ] [[VhdFile]FileCopy]
VERBOSE: [HOST01]: LCM: [ End Resource ] [[VhdFile]FileCopy]
VERBOSE: [HOST01]: LCM: [ End Set ]
VERBOSE: [HOST01]: LCM: [ End Set ] in 1.0770 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 1.107 seconds
DSC configuration
<#
.DESCRIPTION
Not yet written.
#>
Configuration Example
{
param
(
[Parameter()]
$vhdPath = 'D:\VMDisks\VM-DC01-Disk.vhdx',
[Parameter()]
$itemToCopy = 'C:\DSCConfigs\*',
[Parameter()]
$relativeDestinationPath = 'C:\Temp'
)
Import-DscResource -ModuleName 'HyperVDsc'
VhdFile FileCopy
{
VhdPath = $vhdPath
FileDirectory = DSC_FileDirectory
{
SourcePath = $itemToCopy
DestinationPath = $relativeDestinationPath
Force = $true
Type = 'Directory'
Recurse = $true
}
}
}
ExampleSuggested solution
Working copy to vhdx to function to eventualy do:
`Configuration VM-DC01
{
param
(
[Parameter()]
$VirtualHardDiskPath = 'D:\VMDisks\disk.vhdx',
[Parameter()]
$VirtualMachinePath = 'D:\VMs',
[Parameter()]
$VirtualMachineTemplate = 'D:\ISO\template.vhdx',
[Parameter()]
$Name = 'VM-DC01-Disk'
)
Import-DscResource -ModuleName xPendingReboot
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName ComputerManagementDsc
Import-DscResource -ModuleName CertificateDsc
Import-DscResource -ModuleName NetworkingDsc
Import-DscResource -ModuleName HyperVDsc
Import-DscResource -ModuleName xHyper-V
Node localhost
{
# Configure LCM to allow Windows to automatically reboot if needed. Note: NOT recommended for production!
LocalConfigurationManager
{
# Set this to $true to automatically reboot the node after a configuration that requires reboot is applied. Otherwise, you will have to manually reboot the node for any configuration that requires it. The default (recommended for PRODUCTION servers) value is $false.
RebootNodeIfNeeded = $true
# The thumbprint of a certificate used to secure credentials passed in a configuration.
CertificateId = $node.Thumbprint
}
# Install Windows Feature "Hyper-V Services".
WindowsFeature HyperV
{
Ensure = 'Present'
Name = 'Hyper-V'
}
WindowsFeature HyperVPowerShell
{
Ensure = 'Present'
Name = 'Hyper-V-PowerShell'
}
# Dynamically build the 'DependsOn' array for the 'VMHyperV' feature
# based on the number of virtual switches specified
$VMHyperVDependsOn = @('[WindowsFeature]HyperV','[WindowsFeature]HyperVPowerShell')
# Create a switch to be used by the VM
VMSwitch switch
{
Name = 'Test-Switch'
Ensure = 'Present'
Type = 'Internal'
}
# Create new VHD file.
File NewVHD1
{
SourcePath = $VirtualMachineTemplate
DestinationPath = Join-path (Split-Path $VirtualHardDiskPath) "$name.vhdx"
Type = 'File'
Ensure = 'Present'
}
#Vhd NewVHD1
#{
# Ensure = 'Present'
# Name = $name
# Path = (Split-Path $VirtualHardDiskPath)
# Generation = 'Vhdx'
# ParentPath = $VirtualHardDiskPath
#}
# Customize VHD by copying a folders/files to the VHD before a VM can be created
# Example below shows copying unattended.xml before a VM can be created
VhdFile CopyDSCConfigPFX
{
VhdPath = Join-path (Split-Path $VirtualHardDiskPath) "$name.vhdx"
FileDirectory = @(
# Pending.mof
DSC_FileDirectory {
SourcePath = 'C:\DSCConfigs\HADC\DC01\Localhost.mof'
DestinationPath = "Temp\Pending.mof"
Ensure = 'Present'
}
# meta.mof
DSC_FileDirectory {
SourcePath = 'C:\DSCConfigs\HADC\DC01\localhost.meta.mof'
DestinationPath = "Windows\System32\Configuration\MetaConfig.mof"
Type = 'File'
Ensure = 'Present'
}
# xPFX
DSC_FileDirectory {
SourcePath = 'C:\DSCConfigs\PFX'
DestinationPath = "DSCConfigs\PFX"
type = 'Directory'
Recurse = $True
Ensure = 'Present'
}
# xModules
DSC_FileDirectory {
SourcePath = 'C:\DSCConfigs\Modules'
DestinationPath = "DSCConfigs\Modules"
type = 'Directory'
Recurse = $True
Ensure = 'Present'
}
)
DependsOn = '[File]NewVHD1'
}
# create the testVM out of the vhd.
VMHyperV TestVM
{
Name = "$($name)_vm"
SwitchName = 'Test-Switch'
VhdPath = Join-path (Split-Path $VirtualHardDiskPath) "$name.vhdx"
Path = "$VirtualMachinePath" + "\" + "$($name)_vm"
ProcessorCount = 2
MaximumMemory = 4GB
MinimumMemory = 1GB
RestartIfNeeded = $true
DependsOn = '[VMSwitch]switch', '[File]NewVHD1', '[VhdFile]CopyDSCConfigPFX'
State = 'Running'
Generation = '2'
SecureBoot = $true
}
}
}`
Operating system the target node is running
Server 2022 standalone
PowerShell version and build the target node is running
Latest
HyperVDsc version
Latest
Metadata
Metadata
Assignees
Labels
No labels