Files
GPOZaurr/Private/ConvertTo-XMLCertificates.ps1
T
2021-05-26 16:32:07 +02:00

101 lines
5.3 KiB
PowerShell

function ConvertTo-XMLCertificates {
[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
}
}
}