Functions/New-PSEncryptedDataCertificate.ps1
function New-PSEncryptedDataCertificate { [OutputType([string])] [CmdletBinding()] param ( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string] $Name, [Parameter()] [ValidateSet('CurrentUser','LocalMachine')] [string] $CertStore = 'CurrentUser' ) try { $Subject = New-Object -ComObject X509Enrollment.CX500DistinguishedName.1 $Subject.Encode("CN=$($Name),CN=$($env:COMPUTERNAME),CN=PSEncryptedData", 0) $Key = New-Object -ComObject X509Enrollment.CX509PrivateKey.1 -Property @{ ProviderName = 'Microsoft RSA SChannel Cryptographic Provider' KeySpec = 1 Length = 2048 SecurityDescriptor = 'D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)' MachineContext = if($CertStore -eq 'CurrentUser'){0}else{1} ExportPolicy = 0 } $Key.Create() $OIDs = New-Object -ComObject X509Enrollment.CObjectIds.1 $ServerAuthOID = New-Object -ComObject X509Enrollment.CObjectId.1 $ServerAuthOID.InitializeFromValue('1.3.6.1.5.5.7.3.1') $OIDS.Add($ServerAuthOID) $Extensions = New-Object -ComObject X509Enrollment.CX509ExtensionEnhancedKeyUsage.1 $Extensions.InitializeEncode($OIDs) $CSR = New-Object -ComObject X509Enrollment.CX509CertificateRequestCertificate.1 if ($CertStore -eq 'CurrentUser') { $CSR.InitializeFromPrivateKey(1, $Key, '') } else { $CSR.InitializeFromPrivateKey(2, $Key, '') } $CSR.Subject = $Subject $CSR.Issuer = $CSR.Subject $CSR.NotBefore = ((Get-Date) - (New-TimeSpan -Minutes 5)) $CSR.NotAfter = ((Get-Date) + (New-TimeSpan -Days 730)) $CSR.X509Extensions.Add($Extensions) $CSR.Encode() $Enrollment = New-Object -ComObject X509Enrollment.CX509Enrollment.1 $Enrollment.InitializeFromRequest($CSR) $CSRResponse = $Enrollment.CreateRequest(0) $Enrollment.InstallResponse(2, $CSRResponse, 0, '') Get-ChildItem "Cert:\$($CertStore)\My" | Where-Object Subject -eq $Subject.Name } catch { throw } } |