##################################################################### # ExportCertificate_ps1.0.ps1 # Version 1.5 # # Exports signing certificates from files using file context menu # # Require PowerShell V2, not compatible with PowerShell 1.0 # # Vadims Podans (c) 2009 # http://www.sysadmins.lv/ ##################################################################### #requires -Version 2.0 $FilePath = Read-Host "Укажите путь для размещения ExportCertificate.PS1" if (Test-Path -LiteralPath $FilePath) { $FilePath = Join-Path $FilePath "ExportCertificate.ps1" $RegPath = "Registry::HKLM\Software\Classes\*\Shell\Export Certificate\command" $RegValue = "C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -noninteractive -nologo -noprofile -command $FilePath '%1'" New-Item -Path $RegPath -Force if (Test-Path -LiteralPath $RegPath) { New-ItemProperty -LiteralPath $RegPath -Name "(Default)" -Value $RegValue -Force New-Item -ItemType file -Path $FilePath -Force -ErrorAction SilentlyContinue if (Test-Path -LiteralPath $FilePath) { $exefile = 'param ($file) $cp = new-object Microsoft.CSharp.CSharpCodeProvider $cpar = New-Object System.CodeDom.Compiler.CompilerParameters $HideWindow = 0x0080 $ShowWindow = 0x0040 $Code = @" using System; using System.Runtime.InteropServices; namespace Win32API { public class Window { [DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); } } "@ $cp.CompileAssemblyFromSource($cpar, $code) $PSHandle = (Get-Process –id $pid).MainWindowHandle [Win32API.Window]::SetWindowPos($PSHandle, 0, 0, 0, 0, 0, $HideWindow) $item = gi $file $type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert $folder = (Get-ItemProperty "HKCU:\software\microsoft\windows\currentversion\explorer\shell folders" -Name personal).personal $target = Join-Path $folder $item.name function _msgbox_ ($title, $text, $type = "None") { [void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms") $msg = [Windows.Forms.MessageBox]::Show($text, $title, [Windows.Forms.MessageBoxButtons]::ok, [Windows.Forms.MessageBoxIcon]::$type) } $status = Get-AuthenticodeSignature "$file" switch ($status.status) { "Valid" {_msgbox_ -title "Valid Certificate" -text "Here is valid certificate. Press Ok to export it to MyDocs folder." $bytes = $status.SignerCertificate.export($type) [System.Convert]::ToBase64String($bytes) > ($target + ".cer")} "HashMismatch" {_msgbox_ -title "Hash mismatch" -type "Error" -text $status.statusmessage} "NotSigned" {_msgbox_ -title "No certificate" -type "Warning" -text $status.statusmessage} default {_msgbox_ -title "Unknown error" -type "Error" -text $status.statusmessage} } ' Set-Content -Path $FilePath -Value $exefile -Force } else { Write-Warning "Unable to create file in: $FilePath. Path is incorrect or you haven't sufficient permissions" } } else { Write-Warning "Unable to create registry key. May be you haven't sufficient permissions to HKLM hive" } } else {Write-Warning "Source Folder must exist"} # SIG # Begin signature block # MIIQNAYJKoZIhvcNAQcCoIIQJTCCECECAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU8mgi8Y+ixxAYrdTdH2GYovuu # uLugggykMIIDejCCAmKgAwIBAgIQOCXX+vhhr570kOcmtdZa1TANBgkqhkiG9w0B # AQUFADBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzAp # BgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EwHhcNMDcw # NjE1MDAwMDAwWhcNMTIwNjE0MjM1OTU5WjBcMQswCQYDVQQGEwJVUzEXMBUGA1UE # ChMOVmVyaVNpZ24sIEluYy4xNDAyBgNVBAMTK1ZlcmlTaWduIFRpbWUgU3RhbXBp # bmcgU2VydmljZXMgU2lnbmVyIC0gRzIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ # AoGBAMS18lIVvIiGYCkWSlsvS5Frh5HzNVRYNerRNl5iTVJRNHHCe2YdicjdKsRq # CvY32Zh0kfaSrrC1dpbxqUpjRUcuawuSTksrjO5YSovUB+QaLPiCqljZzULzLcB1 # 3o2rx44dmmxMCJUe3tvvZ+FywknCnmA84eK+FqNjeGkUe60tAgMBAAGjgcQwgcEw # NAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2ln # bi5jb20wDAYDVR0TAQH/BAIwADAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js # LnZlcmlzaWduLmNvbS90c3MtY2EuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI # MA4GA1UdDwEB/wQEAwIGwDAeBgNVHREEFzAVpBMwETEPMA0GA1UEAxMGVFNBMS0y # MA0GCSqGSIb3DQEBBQUAA4IBAQBQxUvIJIDf5A0kwt4asaECoaaCLQyDFYE3CoIO # LLBaF2G12AX+iNvxkZGzVhpApuuSvjg5sHU2dDqYT+Q3upmJypVCHbC5x6CNV+D6 # 1WQEQjVOAdEzohfITaonx/LhhkwCOE2DeMb8U+Dr4AaH3aSWnl4MmOKlvr+ChcNg # 4d+tKNjHpUtk2scbW72sOQjVOCKhM4sviprrvAchP0RBCQe1ZRwkvEjTRIDroc/J # ArQUz1THFqOAXPl5Pl1yfYgXnixDospTzn099io6uE+UAKVtCoNd+V5T9BizVw9w # w/v1rZWgDhfexBaAYMkPK26GBPHr9Hgn0QXF7jRbXrlJMvIzMIIDxDCCAy2gAwIB # AgIQR78Zld+NUkZD99ttSA0xpDANBgkqhkiG9w0BAQUFADCBizELMAkGA1UEBhMC # WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUx # DzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24x # HzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNMDMxMjA0MDAwMDAw # WhcNMTMxMjAzMjM1OTU5WjBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNp # Z24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2Vydmlj # ZXMgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpyrKkzM0grwp9 # iayHdfC0TvHfwQ+/Z2G9o2Qc2rv5yjOrhDCJWH6M22vdNp4Pv9HsePJ3pn5vPL+T # rw26aPRslMq9Ui2rSD31ttVdXxsCn/ovax6k96OaphrIAuF/TFLjDmDsQBx+uQ3e # P8e034e9X3pqMS4DmYETqEcgzjFzDVctzXg0M5USmRK53mgvqubjwoqMKsOLIYdm # vYNYV291vzyqJoddyhAVPJ+E6lTBCm7E/sVK3bkHEZcifNs+J9EeeOyfMcnx5iIZ # 28SzR0OaGl+gHpDkXvXufPF9q2IBj/VNC97QIlaolc2uiHau7roN8+RN2aD7aKCu # FDuzh8G7AgMBAAGjgdswgdgwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhho # dHRwOi8vb2NzcC52ZXJpc2lnbi5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADBBBgNV # HR8EOjA4MDagNKAyhjBodHRwOi8vY3JsLnZlcmlzaWduLmNvbS9UaGF3dGVUaW1l # c3RhbXBpbmdDQS5jcmwwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQD # AgEGMCQGA1UdEQQdMBukGTAXMRUwEwYDVQQDEwxUU0EyMDQ4LTEtNTMwDQYJKoZI # hvcNAQEFBQADgYEASmv56ljCRBwxiXmZK5a/gqwB1hxMzbCKWG7fCCmjXsjKkxPn # BFIN70cnLwA4sOTJk06a1CJiFfc/NyFPcDGA8Ys4h7Po6JcA/s9Vlk4k0qknTnqu # t2FB8yrO58nZXt27K4U+tZ212eFX/760xX71zwye8Jf+K9M7UhsbOCf3P0owggVa # MIIDQqADAgECAgoWkwfVAAAAAAATMA0GCSqGSIb3DQEBBQUAMEkxEjAQBgoJkiaJ # k/IsZAEZFgJsdjEZMBcGCgmSJomT8ixkARkWCXN5c2FkbWluczEYMBYGA1UEAxMP # c3lzYWRtaW5zLUxWLUNBMB4XDTA5MDgwNzEzMzMyOVoXDTEwMDgwNzEzMzMyOVow # VzESMBAGCgmSJomT8ixkARkWAmx2MRkwFwYKCZImiZPyLGQBGRYJc3lzYWRtaW5z # MQ4wDAYDVQQDEwVVc2VyczEWMBQGA1UEAxMNQWRtaW5pc3RyYXRvcjCBnzANBgkq # hkiG9w0BAQEFAAOBjQAwgYkCgYEAloTUoXflQDFR9ZS5sAdOT1QKQQ5IKCpaY2Vv # c9Lxlymo2VI0T3f8lBpzVm2C6ZeKtSyHs+GjbklFUDFDgT8wJLHgE5aFhFukh7nh # wJQsfNKyg10zE/mebfIZIGZ9IPFGDvMVJW+eV+skUjBn58tDFR+3IgnjkOGqbd6R # 8Dsir28CAwEAAaOCAbgwggG0MA4GA1UdDwEB/wQEAwIHgDA7BgkrBgEEAYI3FQcE # LjAsBiQrBgEEAYI3FQiGmb0x4rBigu2DJtLefoO13VFhhLz2C4T0qhkCAWQCAQIw # HQYDVR0OBBYEFFVXJ/UEPfMmoCnu5WNbREsdwlerMB8GA1UdIwQYMBaAFHrmiNrp # +Fw+BwTeEaI4Iql1oxOrMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9jYS5zeXNh # ZG1pbnMubHYvc3lzYWRtaW5zLUxWLUNBLmNybDB/BggrBgEFBQcBAQRzMHEwJwYI # KwYBBQUHMAGGG2h0dHA6Ly9jYS5zeXNhZG1pbnMubHYvb2NzcDBGBggrBgEFBQcw # AoY6aHR0cDovL2NhLnN5c2FkbWlucy5sdi9jYS5zeXNhZG1pbnMubHZfc3lzYWRt # aW5zLUxWLUNBLmNydDATBgNVHSUEDDAKBggrBgEFBQcDAzAbBgkrBgEEAYI3FQoE # DjAMMAoGCCsGAQUFBwMDMDUGA1UdEQQuMCygKgYKKwYBBAGCNxQCA6AcDBpBZG1p # bmlzdHJhdG9yQHN5c2FkbWlucy5sdjANBgkqhkiG9w0BAQUFAAOCAgEAiAoSViW5 # /n4EJZmLBGrFPoTOCPcxkuCeCm8aLDjvvKZZWl0ylZFrCf099NmjdsBZJjk7Gvd6 # NhiCX80QJaZvoGv/dTK9EvqlFKO46aQzIPrEVCX7FmEA5yDSvmyO/lFsa5m5oM5x # Q6otTM6ZooGNLBMYmaFkJ6N9OsgR1x9A+2f6htAH5BwdmacnvYwMTl3SNmR9rvxJ # HALAErVBWFkwOlU7FUnLQSmlKVhXKaDhrp/mm3ETloRWPVm7jkqLwOnFCys1dTBx # dIDGNHjboWFvUF4zJSJ/vsQhw0aF8bTSP0UIkh0689bKw+ae0+Z62gtVq4usOJMF # zANhgtLcNYUlsB46AIgenneeK0aZAgQ6jGXV0BTWrzMntF6jv7/cA/lhp3AG5Bg8 # hjR890YrrLk6l65zUnJlesnW45hg0wmgb5DDceaXiVJN1Gb9GhbdQfd9nHqCXQnl # hU4eTVyGGfvwaO0qGlklf/aCYKwTThrWLYTrXCbggGkZJqldj8uTAz5fwRgjZ6fV # 9JbMz6bgFdWiOpJUEd30R56i2QNVnu0+EtueTuV26NLbqis2Wi4pbS9jqO44pFMa # usPpPqsu5xoQ8Ad8Wb5JOMA/PClSf7OFXPeqyHgWHZHwMKXY5GdUbLLU2ZfifK1u # c55wnZ+kPGm5r3BUY2CVhvltZIJw6r7nTOsxggL6MIIC9gIBATBXMEkxEjAQBgoJ # kiaJk/IsZAEZFgJsdjEZMBcGCgmSJomT8ixkARkWCXN5c2FkbWluczEYMBYGA1UE # AxMPc3lzYWRtaW5zLUxWLUNBAgoWkwfVAAAAAAATMAkGBSsOAwIaBQCgeDAYBgor # BgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE # MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRi # /G7FXHKIkSpfM54isflENbFO6jANBgkqhkiG9w0BAQEFAASBgGQ2YD6RhP07Mc23 # 8hAUM6iafr3YzpTR+rNHOEEcL0zO6v3riEnpqZeMaSUPfgsnrwrT/nc2hel7VQS9 # nQVWzb+lEUAb8xEkzO7qyrKr2Yt5uHvD4nQX/aFyVLjS79/5G66NylkOCQ57xgrl # VlQRba/+TVK3z29oiOF6nwI8gri1oYIBfzCCAXsGCSqGSIb3DQEJBjGCAWwwggFo # AgEBMGcwUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMSsw # KQYDVQQDEyJWZXJpU2lnbiBUaW1lIFN0YW1waW5nIFNlcnZpY2VzIENBAhA4Jdf6 # +GGvnvSQ5ya11lrVMAkGBSsOAwIaBQCgXTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN # AQcBMBwGCSqGSIb3DQEJBTEPFw0wOTA5MDQwODU1NTBaMCMGCSqGSIb3DQEJBDEW # BBSHn/LbURxp2lpbrwxUatv5hpScbzANBgkqhkiG9w0BAQEFAASBgC5i26i5yCpj # MKf++vlF2P9i9qpVSzgadlAPH0JWBrmoEN+p7Vz0F9iOnBNeGlmOUAG5USMPY+Fo # VFzOPjQFj+MklQCDCuY6J6hVG9yVKJNei+8lGnhV4tI82NitV9HbKkad52zXYrFG # lr7Ozg6ETnHKJv2hBdSJ0K0iqlcsKvfE # SIG # End signature block