Запуск скрипта PowerShell в целом не работает, но работает в пакетном режиме - PullRequest
0 голосов
/ 15 февраля 2019

Запуск следующего скрипта все вместе (как файл ps1) неправильно устанавливает разрешения для закрытого ключа и выдает мне эту ошибку, когда я перехожу к управлению закрытыми ключами на сертификате.

Error

Однако, если я запускаю все команды в одном и том же порядке, но небольшими партиями, я могу видеть разрешения на закрытый ключ и не вижу ошибку, как при запуске всехвсе вместе.Запуск большими партиями (3 отдельные команды) также не работает, поэтому не думайте, что это командная строка / файл

Что я делаю не так?

Import-Module WebAdministration

# Delete current certificates
Remove-Item cert:\LocalMachine\Root\asdfasdfadfasf
Remove-Item cert:\LocalMachine\My\asdfasdfadfasf -DeleteKey

# Add the new certificate to the correct stores
$certBytes = [System.Convert]::FromBase64String("cert as base 64")
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certBytes, "password", "MachineKeySet,PersistKeySet")
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My", "LocalMachine")
$store.Open("ReadWrite")
$store.Add($cert)
$store.Close()
$store2 = New-Object System.Security.Cryptography.X509Certificates.X509Store("Root", "LocalMachine")
$store2.Open("ReadWrite")
$store2.Add($cert)
$store2.Close()

# Get the certificate added above
$certificate = Get-ChildItem "Cert:\LocalMachine\My" |
               Where thumbprint -eq "asdfasdfadfasf"
if ($certificate -eq $null) {
    $message = "Certificate with thumbprint:asdfasdfadfasf does not exist at Cert:\LocalMachine\My"
    Write-Host $message -ForegroundColor Red
    exit 1;
} else {
    # Get the private key permissions
    $rsaCert = [System.Security.Cryptography.X509Certificates.RSACertificateExtensions]::GetRSAPrivateKey($certificate)
    $fileName = $rsaCert.key.UniqueName
    $path = "$env:ALLUSERSPROFILE\Microsoft\Crypto\RSA\MachineKeys\$fileName"
    $permissions = Get-Acl -Path $path

    #  Get the appPool user
    $site = Get-IISSite -Name 'website'
    $appPool = Get-IISAppPool -Name $site.Applications[0].ApplicationPoolName
    $appPoolUser = "IIS AppPool\"+$appPool.Name

    # Give read permissions on the private key
    $access_rule = New-Object System.Security.AccessControl.FileSystemAccessRule($appPoolUser, 'Read', 'None', 'None', 'Allow')
    $permissions.AddAccessRule($access_rule)
    Set-Acl -Path $path -AclObject $permissions
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...