@@ -150,6 +150,42 @@ function FindAndParseResourceDefinitions {
150150 return $resourceList
151151}
152152
153+ function GetExportMethod ($ResourceType , $HasFilterProperties , $ResourceTypeName ) {
154+ $methods = $ResourceType.GetMethods () | Where-Object { $_.Name -eq ' Export' }
155+ $method = $null
156+
157+ if ($HasFilterProperties ) {
158+ " Properties provided for filtered export" | Write-DscTrace - Operation Trace
159+ $method = foreach ($mt in $methods ) {
160+ if ($mt.GetParameters ().Count -gt 0 ) {
161+ $mt
162+ break
163+ }
164+ }
165+
166+ if ($null -eq $method ) {
167+ " Export method with parameters not implemented by resource '$ResourceTypeName '. Filtered export is not supported." | Write-DscTrace - Operation Error
168+ exit 1
169+ }
170+ }
171+ else {
172+ " No properties provided, using parameterless export" | Write-DscTrace - Operation Trace
173+ $method = foreach ($mt in $methods ) {
174+ if ($mt.GetParameters ().Count -eq 0 ) {
175+ $mt
176+ break
177+ }
178+ }
179+
180+ if ($null -eq $method ) {
181+ " Export method not implemented by resource '$ResourceTypeName '" | Write-DscTrace - Operation Error
182+ exit 1
183+ }
184+ }
185+
186+ return $method
187+ }
188+
153189function LoadPowerShellClassResourcesFromModule {
154190 [CmdletBinding (HelpUri = ' ' )]
155191 param (
@@ -471,20 +507,18 @@ function Invoke-DscOperation {
471507 }
472508 ' Export' {
473509 $t = $dscResourceInstance.GetType ()
474- $methods = $t.GetMethods () | Where-Object { $_.Name -eq ' Export' }
475- $method = foreach ($mt in $methods ) {
476- if ($mt.GetParameters ().Count -eq 0 ) {
477- $mt
478- break
479- }
480- }
510+ $hasFilter = $null -ne $DesiredState.properties -and
511+ ($DesiredState.properties.PSObject.Properties | Measure-Object ).Count -gt 0
512+
513+ $method = GetExportMethod - ResourceType $t - HasFilterProperties $hasFilter - ResourceTypeName $DesiredState.Type
481514
482- if ($null -eq $method ) {
483- " Export method not implemented by resource '$ ( $DesiredState.Type ) '" | Write-DscTrace - Operation Error
484- exit 1
485- }
486515 $resultArray = @ ()
487- $raw_obj_array = $method.Invoke ($null , $null )
516+ if ($hasFilter ) {
517+ $raw_obj_array = $method.Invoke ($null , @ ($dscResourceInstance ))
518+ } else {
519+ $raw_obj_array = $method.Invoke ($null , $null )
520+ }
521+
488522 foreach ($raw_obj in $raw_obj_array ) {
489523 $Result_obj = @ {}
490524 $ValidProperties | ForEach-Object {
0 commit comments