This approach to using new-object
should work:
$cert = new-object System.Security.Cryptography.X509Certificates.X509Certificate `
-ArgumentList @(,$bytes)
The trick is that PowerShell is expecting an array of constructor arguments. When there is only one argument and it is an array, it can confuse PowerShell's overload resolution algorithm. The code above helps it out by putting the byte array in an array with just that one element.
Update: in PowerShell >= v5 you can call the constructor directly like so:
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate]::new($bytes)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…