function GetCAInfo
{
param($Config, $ClientCredentials)
$pairs = $Config -split '\\'
if($pairs.length -ne 2)
{
$pairs = $Config -split '#'
}
if($pairs.length -ne 2)
{
throw ('Не удается выделить имя ЦС для строки подключения:' + $Config)
}
$authHost = $pairs[0]
$authName = $pairs[1]
[CryptoPro.PkiClient.AssemblyResolver]::Load('CertificateService.Client') > $null;
if($ClientCredentials -ne $null)
{
$submit = (new-object CertificateService.Client.WcfCaClientProvider ($authHost, $ClientCredentials)).CreateCertRequest()
}
else
{
$submit = (new-object CertificateService.Client.DcomCaClientProvider ($authHost)).CreateCertRequest()
}
$caInfo = $submit.GetCAInfo($authName)
return $caInfo
}
function Prompt
{
param([scriptblock]$WouldPromtDelegate, $PromptMessage, $ErrorMessage, [switch]$ShouldSkip = $True, [switch]$ShouldRetry = $True)
$p = New-Module -AsCustomObject -ScriptBlock {
$Caption = 'Предупреждение'
$Message = "Внимание! $PromptMessage. Прервать выполнение мастера?"
[System.Management.Automation.Host.ChoiceDescription[]] $Choices = @()
$Abort = $null
$Skip = $null
$Retry = $null
$Default = $null
function Prompt() {
return $Host.UI.PromptForChoice($Caption,$Message,$Choices,$Default)
}
Export-ModuleMember -Variable * -Function * -Verbose:$false
}
$AbortDescription = New-Object System.Management.Automation.Host.ChoiceDescription '&Abort - &Прервать','Прервать выполнение мастера.'
$RetryDescription = New-Object System.Management.Automation.Host.ChoiceDescription '&Retry - &Повторить','Повторно проверить.'
$SkipDescription = New-Object System.Management.Automation.Host.ChoiceDescription '&Skip - &Пропустить','Попробовать продолжить выполнение мастера.'
$p.Choices += $AbortDescription
if($ShouldRetry) {
$p.Choices += $RetryDescription
}
if($ShouldSkip -eq $True) {
$p.Choices += $SkipDescription
}
$p.Abort = $p.Choices.IndexOf($AbortDescription)
if($ShouldRetry) {
$p.Retry = $p.Choices.IndexOf($RetryDescription)
}
else {
$p.Retry = $null
}
if($ShouldSkip -eq $True) {
$p.Skip = $p.Choices.IndexOf($SkipDescription)
}
else {
$p.Skip = $null
}
$p.Default = $p.Abort
$keepTrying = $true
while ($keepTrying -eq $true) {
$p.Message = "Внимание! $PromptMessage. Прервать выполнение мастера?"
try {
$keepTrying = Invoke-Command -Scriptblock $WouldPromtDelegate
}
catch {
$p.Message = "Внимание! $ErrorMessage. Прервать выполнение мастера?"
}
if ($keepTrying -eq $true) {
$answer = $p.Prompt()
switch ($answer) {
$p.Abort { Write-Verbose -message 'Выполнение мастера прервано пользователем.'; exit }
$p.Retry { continue }
$p.Skip { $keepTrying = $false }
}
}
}
}
function ValidateKeyAcquired
{
param($Config, $ClientCredentials)
$isCaSignCertKeyAquired = {
return (GetCAInfo -Config $Config -ClientCredentials $ClientCredentials).CAState -eq 0
}
Prompt `
-WouldPromtDelegate $isCaSignCertKeyAquired `
-PromptMessage 'Сертификат не может быть изготовлен - ни один из ключей подписи центра сертификации в данный момент не загружен.' `
-ErrorMessage 'Сертификат не может быть изготовлен - Центр Сертификации недоступен'
}
ValidateKeyAcquired -Config $Config
$RegAuthSubject =
Get-Item -Path $Path |
Select-Object -ExpandProperty 'ProfileName'
$RawResponse =
Send-PkiRequest -Config $Config -InFile $InFile -ProfileName $RegAuthSubject -CheckExisting |
Receive-PkiResponse -Config $Config
$RegAuthX509Certificate = $null
if(($RawResponse -ne $null) -and (($RawResponse -is [int]) -eq $False))
{
$RegAuthX509Certificate =
Get-PkiResponseCertificate -RawResponse $RawResponse
}
$RegAuthX509CertificateMapped = $null
if($RegAuthX509Certificate -ne $null)
{
$RegAuthX509CertificateMapped =
New-Item -Path $Path1 -Certificate $RegAuthX509Certificate -Password $Password
Start-Sleep -Seconds '5'
}
Snimok.PNG
(12kb) загружен 4 раз(а).