VMware Cloud Community
virtualhobbit
Enthusiast
Enthusiast
Jump to solution

Trying to replace characters to format PEM certificate into one line

Hi,

I'm trying to format a PEM certificate into one line so I can use it in a JSON request to replace Horizon UAG certs.

So instead of:

-----BEGIN CERTIFICATE-----

MIIF3DCCBMSgAwIBAgISBCkuTZLrEXMdLGqMq4wmzVgvMA0GCSqGSIb3DQEBCwUA

MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD

ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTExMTMwMDIwMjhaFw0y

MDAyMTEwMDIwMjhaMB4xHDAaBgNVBAMTE3ZkaS5ob2JiaXRjbG91ZC5jb20wggGi

MA0GCSqGSIb3DQEBAQUAA4IBjwAwggGK

I get:

-----BEGIN CERTIFICATE-----\nMIIF3DCCBMSgAwIBAgISBCkuTZLrEXMdLGqMq4wmzVgvMA0GCSqGSIb3DQEBCwUA\nMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\nExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTExMTMwMDIwMjhaFw0y\nMDAyMTEwMDIwMjhaMB4xHDAaBgNVBAMTE3ZkaS5ob2JiaXRjbG91ZC5jb20wggGi\nMA

(notice the "\n" that embedded).

I can do it in Awk using:

awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' cert-name.pem

However, I need to achieve the same in PowerCLI.

I'm trying variations of

$cert = (Get-Content vdi.hobbitcloud.com-chain.pem' | Out-String) -replace "`r?`n(?!`r?`n)"

But can't seem to manage it.

Does anyone have any ideas on what I need to use?

Many thanks,

-Mark

Reply
0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Not 100% sure what exactly you want to do, but I guess the following should come close.
It creates and reads a multi-line .pem file.
And then converts the data to a single string, replacing <CR><LF> with '\n'.

$data = @'

-----BEGIN CERTIFICATE-----

MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV

BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v

MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x

ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV

BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv

bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB

OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP

xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P

+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB

BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen

v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS

pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND

-----END CERTIFICATE-----

'@


$data | Set-Content -Path .\test.pem

$dataRead = Get-Content -Path .\test.pem -Raw

$single = $dataRead.Replace("`r`n",'\n')

$single | Set-Content -Path .\out.txt


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

Reply
0 Kudos
5 Replies
LucD
Leadership
Leadership
Jump to solution

Not 100% sure what exactly you want to do, but I guess the following should come close.
It creates and reads a multi-line .pem file.
And then converts the data to a single string, replacing <CR><LF> with '\n'.

$data = @'

-----BEGIN CERTIFICATE-----

MIICMzCCAZygAwIBAgIJALiPnVsvq8dsMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNV

BAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNVBAcTA2ZvbzEMMAoGA1UEChMDZm9v

MQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2ZvbzAeFw0xMzAzMTkxNTQwMTlaFw0x

ODAzMTgxNTQwMTlaMFMxCzAJBgNVBAYTAlVTMQwwCgYDVQQIEwNmb28xDDAKBgNV

BAcTA2ZvbzEMMAoGA1UEChMDZm9vMQwwCgYDVQQLEwNmb28xDDAKBgNVBAMTA2Zv

bzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzdGfxi9CNbMf1UUcvDQh7MYB

OveIHyc0E0KIbhjK5FkCBU4CiZrbfHagaW7ZEcN0tt3EvpbOMxxc/ZQU2WN/s/wP

xph0pSfsfFsTKM4RhTWD2v4fgk+xZiKd1p0+L4hTtpwnEw0uXRVd0ki6muwV5y/P

+5FHUeldq+pgTcgzuK8CAwEAAaMPMA0wCwYDVR0PBAQDAgLkMA0GCSqGSIb3DQEB

BQUAA4GBAJiDAAtY0mQQeuxWdzLRzXmjvdSuL9GoyT3BF/jSnpxz5/58dba8pWen

v3pj4P3w5DoOso0rzkZy2jEsEitlVM2mLSbQpMM+MUVQCQoiG6W9xuCFuxSrwPIS

pAqEAuV4DNoxQKKWmhVv+J0ptMWD25Pnpxeq5sXzghfJnslJlQND

-----END CERTIFICATE-----

'@


$data | Set-Content -Path .\test.pem

$dataRead = Get-Content -Path .\test.pem -Raw

$single = $dataRead.Replace("`r`n",'\n')

$single | Set-Content -Path .\out.txt


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
virtualhobbit
Enthusiast
Enthusiast
Jump to solution

Hey Luc!

I should probably have put this link in:

Convert Certificate Files to One-Line PEM Format

Thanks, I’ll give that a try and report back!

-Mark

Reply
0 Kudos
virtualhobbit
Enthusiast
Enthusiast
Jump to solution

Thanks Luc, (unsurprisingly) your answer is correct and exactly what I needed 🙂

Many thanks,

-Mark

Reply
0 Kudos
LucD
Leadership
Leadership
Jump to solution

You're welcome :smileygrin:

Working while honeymooning?!?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
virtualhobbit
Enthusiast
Enthusiast
Jump to solution

No rest for the wicked  

Reply
0 Kudos