mirror of
https://github.com/EvotecIT/GPOZaurr.git
synced 2026-07-26 11:49:17 +00:00
129 lines
6.3 KiB
PowerShell
129 lines
6.3 KiB
PowerShell
function ConvertTo-XMLCertificates {
|
|
<#
|
|
.SYNOPSIS
|
|
Converts a PowerShell custom object representing certificate data into XML format.
|
|
|
|
.DESCRIPTION
|
|
This function takes a PowerShell custom object representing certificate data and converts it into XML format for storage or transmission.
|
|
|
|
.PARAMETER GPO
|
|
The PowerShell custom object representing the certificate data.
|
|
|
|
.PARAMETER Category
|
|
An array of categories for the certificate data.
|
|
|
|
.PARAMETER SingleObject
|
|
Indicates whether to convert a single object or multiple objects.
|
|
|
|
.EXAMPLE
|
|
ConvertTo-XMLCertificates -GPO $certificateDataObject -Category @('Category1', 'Category2') -SingleObject
|
|
|
|
Description:
|
|
Converts the $certificateDataObject into XML format for multiple categories as a single object.
|
|
|
|
.EXAMPLE
|
|
$certificateDataObjects | ConvertTo-XMLCertificates -Category @('Category1') -SingleObject
|
|
|
|
Description:
|
|
Converts multiple certificate data objects in $certificateDataObjects into XML format for a single category.
|
|
#>
|
|
[cmdletBinding()]
|
|
param(
|
|
[PSCustomObject] $GPO,
|
|
[string[]] $Category,
|
|
[switch] $SingleObject
|
|
)
|
|
$SkipNames = ('Name', 'LocalName', 'NamespaceURI', 'Prefix', 'NodeType', 'ParentNode', 'OwnerDocument', 'IsEmpty', 'Attributes', 'HasAttributes', 'SchemaInfo', 'InnerXml', 'InnerText', 'NextSibling', 'PreviousSibling', 'ChildNodes', 'FirstChild', 'LastChild', 'HasChildNodes', 'IsReadOnly', 'OuterXml', 'BaseURI', 'PreviousText')
|
|
if ($SingleObject) {
|
|
$CreateGPO = [ordered]@{
|
|
DisplayName = $GPO.DisplayName
|
|
DomainName = $GPO.DomainName
|
|
GUID = $GPO.GUID
|
|
GpoType = $GPO.GpoType
|
|
Count = 0
|
|
Settings = $null
|
|
}
|
|
[Array] $CreateGPO['Settings'] = foreach ($Setting in $GPO.DataSet) {
|
|
$SettingName = $Setting.Name -split ":"
|
|
$MySettings = [ordered] @{
|
|
CreatedTime = $GPO.CreatedTime # : 06.06.2020 18:03:36
|
|
ModifiedTime = $GPO.ModifiedTime # : 17.06.2020 16:08:10
|
|
ReadTime = $GPO.ReadTime # : 13.08.2020 10:15:37
|
|
SecurityDescriptor = $GPO.SecurityDescriptor # : SecurityDescriptor
|
|
FilterDataAvailable = $GPO.FilterDataAvailable # : True
|
|
}
|
|
$Name = $SettingName[1]
|
|
#$Name = Format-ToTitleCase -Text $Setting.Name -RemoveWhiteSpace -RemoveChar ',', '-', "'", '\(', '\)', ':'
|
|
$MySettings['Name'] = $Name # $Setting.Name
|
|
|
|
ConvertTo-XMLNested -CreateGPO $MySettings -Setting $Setting -SkipNames $SkipNames #-Name $Name
|
|
|
|
if ($MySettings.Data) {
|
|
$bytes = $MySettings.Data -replace '\r?\n' -split '(?<=\G.{2})' -ne '' -replace '^', '0x' -as [byte[]]
|
|
$CertificateData = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($bytes)
|
|
|
|
$MySettings['NotBefore'] = $CertificateData.NotBefore
|
|
$MySettings['NotAfter'] = $CertificateData.NotAfter
|
|
$MySettings['HasPrivateKey'] = $CertificateData.HasPrivateKey
|
|
$MySettings['Thumbprint'] = $CertificateData.Thumbprint
|
|
$MySettings['SerialNumber'] = $CertificateData.SerialNumber
|
|
$MySettings['Version'] = $CertificateData.Version
|
|
$MySettings['Handle'] = $CertificateData.Handle
|
|
$MySettings['SignatureAlgorithm'] = $CertificateData.SignatureAlgorithm.Value
|
|
$MySettings['SignatureAlgorithmName'] = $CertificateData.SignatureAlgorithm.FriendlyName
|
|
$MySettings['KeyUsages'] = $CertificateData.Extensions.KeyUsages
|
|
$MySettings.Remove('Data')
|
|
}
|
|
|
|
[PSCustomObject] $MySettings
|
|
}
|
|
|
|
$CreateGPO['Count'] = $CreateGPO['Settings'].Count
|
|
$CreateGPO['Linked'] = $GPO.Linked
|
|
$CreateGPO['LinksCount'] = $GPO.LinksCount
|
|
$CreateGPO['Links'] = $GPO.Links
|
|
[PSCustomObject] $CreateGPO
|
|
} else {
|
|
foreach ($Setting in $GPO.DataSet) {
|
|
$CreateGPO = [ordered]@{
|
|
DisplayName = $GPO.DisplayName
|
|
DomainName = $GPO.DomainName
|
|
GUID = $GPO.GUID
|
|
GpoType = $GPO.GpoType
|
|
}
|
|
$SettingName = $Setting.Name -split ":"
|
|
$CreateGPO['CreatedTime'] = $GPO.CreatedTime # : 06.06.2020 18:03:36
|
|
$CreateGPO['ModifiedTime'] = $GPO.ModifiedTime # : 17.06.2020 16:08:10
|
|
$CreateGPO['ReadTime'] = $GPO.ReadTime # : 13.08.2020 10:15:37
|
|
$CreateGPO['SecurityDescriptor'] = $GPO.SecurityDescriptor # : SecurityDescriptor
|
|
$CreateGPO['FilterDataAvailable'] = $GPO.FilterDataAvailable # : True
|
|
|
|
$Name = $SettingName[1]
|
|
$CreateGPO['Name'] = $Name # $Setting.Name
|
|
|
|
ConvertTo-XMLNested -CreateGPO $CreateGPO -Setting $Setting -SkipNames $SkipNames #-Name $Name
|
|
|
|
if ($CreateGPO.Data) {
|
|
$bytes = $CreateGPO.Data -replace '\r?\n' -split '(?<=\G.{2})' -ne '' -replace '^', '0x' -as [byte[]]
|
|
$CertificateData = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($bytes)
|
|
|
|
$CreateGPO['NotBefore'] = $CertificateData.NotBefore
|
|
$CreateGPO['NotAfter'] = $CertificateData.NotAfter
|
|
$CreateGPO['HasPrivateKey'] = $CertificateData.HasPrivateKey
|
|
$CreateGPO['Thumbprint'] = $CertificateData.Thumbprint
|
|
$CreateGPO['SerialNumber'] = $CertificateData.SerialNumber
|
|
$CreateGPO['Version'] = $CertificateData.Version
|
|
$CreateGPO['Handle'] = $CertificateData.Handle
|
|
$CreateGPO['SignatureAlgorithm'] = $CertificateData.SignatureAlgorithm.Value
|
|
$CreateGPO['SignatureAlgorithmName'] = $CertificateData.SignatureAlgorithm.FriendlyName
|
|
$CreateGPO['KeyUsages'] = $CertificateData.Extensions.KeyUsages
|
|
$CreateGPO.Remove('Data')
|
|
}
|
|
$CreateGPO['Filters'] = $Setting.Filters
|
|
$CreateGPO['Linked'] = $GPO.Linked
|
|
$CreateGPO['LinksCount'] = $GPO.LinksCount
|
|
$CreateGPO['Links'] = $GPO.Links
|
|
[PSCustomObject] $CreateGPO
|
|
}
|
|
}
|
|
} |