From 494b1582ca1eda26c235965b03ba2d774d443a61 Mon Sep 17 00:00:00 2001 From: Przemyslaw Klys Date: Mon, 17 Aug 2020 10:00:47 +0200 Subject: [PATCH] Update --- Private/ConvertTo-XMLGenericPublicKey.ps1 | 34 +++++----------- Private/ConvertTo-XMLNested.ps1 | 49 +++++++++++++++++++++++ 2 files changed, 60 insertions(+), 23 deletions(-) create mode 100644 Private/ConvertTo-XMLNested.ps1 diff --git a/Private/ConvertTo-XMLGenericPublicKey.ps1 b/Private/ConvertTo-XMLGenericPublicKey.ps1 index e552236..275b2aa 100644 --- a/Private/ConvertTo-XMLGenericPublicKey.ps1 +++ b/Private/ConvertTo-XMLGenericPublicKey.ps1 @@ -6,12 +6,6 @@ function ConvertTo-XMLGenericPublicKey { ) $SkipNames = ('Name', 'LocalName', 'NamespaceURI', 'Prefix', 'NodeType', 'ParentNode', 'OwnerDocument', 'IsEmpty', 'Attributes', 'HasAttributes', 'SchemaInfo', 'InnerXml', 'InnerText', 'NextSibling', 'PreviousSibling', 'ChildNodes', 'FirstChild', 'LastChild', 'HasChildNodes', 'IsReadOnly', 'OuterXml', 'BaseURI', 'PreviousText') - <# - $UsedNames = [System.Collections.Generic.List[string]]::new() - [Array] $Settings = foreach ($Cat in $Category) { - $GPO.DataSet | Where-Object { $null -ne $_.$Cat } - } - #> foreach ($Setting in $GPO.DataSet) { $CreateGPO = [ordered]@{ DisplayName = $GPO.DisplayName @@ -28,8 +22,6 @@ function ConvertTo-XMLGenericPublicKey { $CreateGPO['SecurityDescriptor'] = $GPO.SecurityDescriptor # : SecurityDescriptor $CreateGPO['FilterDataAvailable'] = $GPO.FilterDataAvailable # : True - - #$Divider = $SettingName[0] $Name = $SettingName[1] #$Name = Format-ToTitleCase -Text $Setting.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':' $CreateGPO['Name'] = $Name # $Setting.Name @@ -37,6 +29,8 @@ function ConvertTo-XMLGenericPublicKey { #foreach ($Property in ($Setting.Properties | Get-Member -MemberType Properties).Name) { + ConvertTo-XMLNested -CreateGPO $CreateGPO -Setting $Setting -SkipNames $SkipNames #-Name $Name + <# $Properties = $Setting.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames } foreach ($Property in $Properties) { If ($Property -eq 'Value') { @@ -54,26 +48,20 @@ function ConvertTo-XMLGenericPublicKey { } else { throw } - - <# - foreach ($SubProperty in $SubProperties) { - if ($SubProperty -eq 'Name') { - - } elseif ($SubProperty -eq 'String') { - - } elseif ($SubProperty -eq 'Number') { - - } - #$Name = Format-CamelCaseToDisplayName -Text $SubProperty #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':' - #$CreateGPO[$Name] = $Setting.$Property.$SubProperty - } - #> } } else { $Name = Format-CamelCaseToDisplayName -Text $Property #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':' - $CreateGPO[$Name] = $Setting.$Property + if ($Setting.$Property -is [System.Xml.XmlElement]) { + $SubPropeties = $Setting.$Property.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames } + + + + } else { + $CreateGPO[$Name] = $Setting.$Property + } } } + #> $CreateGPO['Filters'] = $Setting.Filters diff --git a/Private/ConvertTo-XMLNested.ps1 b/Private/ConvertTo-XMLNested.ps1 new file mode 100644 index 0000000..7e36347 --- /dev/null +++ b/Private/ConvertTo-XMLNested.ps1 @@ -0,0 +1,49 @@ +function ConvertTo-XMLNested { + [cmdletBinding()] + param( + [System.Collections.IDictionary] $CreateGPO, + [System.Xml.XmlElement] $Setting, + [string[]] $SkipNames, + [string] $Name + ) + + $Properties = $Setting.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames } + $TempName = $Name + foreach ($Property in $Properties) { + If ($Property -eq 'Value') { + if ($Setting.$Property) { + #$SubProperties = $Setting.$Property.PSObject.Properties.Name + if ($Setting.$Property.Name) { + $Name = $Setting.$Property.Name + } else { + if (-not $Name) { + $Name = 'Value' + } + } + if ($Setting.$Property.Number) { + $CreateGPO[$Name] = $Setting.$Property.Number + } elseif ($Setting.$Property.String) { + $CreateGPO[$Name] = $Setting.$Property.String + } else { + $CreateGPO[$Name] = $Setting.$Property + + #throw + } + } + } else { + $Name = -join ($Name, $Property) + $Name = Format-CamelCaseToDisplayName -Text $Name #-RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':' + if ($Setting.$Property -is [System.Xml.XmlElement]) { + #$SubPropeties = $Setting.$Property.PSObject.Properties.Name | Where-Object { $_ -notin $SkipNames } + + + ConvertTo-XMLNested -Setting $Setting.$Property -CreateGPO $CreateGPO -Name $Name -SkipNames $SkipNames + + + } else { + $CreateGPO[$Name] = $Setting.$Property + } + } + $Name = $TempName + } +} \ No newline at end of file