1

Я все еще изучаю способы PowerShell и испытываю трудности с решением проблемы.

Я хотел бы иметь следующий логический поток:

  1. Перейдите в \fileserver \certs и извлеките все отпечатки для каждого файла .cer.
  2. Запустите список удаленных отпечатков для локального сертификата:\ список расположений отпечатков
  3. Если .cer не установлен локально на основании отсутствующего отпечатка, установите .cer из \fileserver \certs в cert:\ location

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

Я мог бы просто установить каждый сертификат в каталоге каждый раз, когда запускается мой сценарий, но я боюсь ненужных накладных расходов, и ограничитель показа заключается в том, что для него потребуются права администратора при каждом запуске, а не при первом запуске или обнаружении новых сертификатов.

Основная проблема заключается в том, что я не могу собрать отпечаток из файла .cer, и предложения Google пока безрезультатны. Если я смогу выяснить, как извлечь отпечаток из удаленного .cer, я вполне уверен, что смогу выяснить логику foreach, необходимую с этого момента.

Мой текущий код:

#Add certificate to local trusted store
$certCheckLocation = "Cert:\LocalMachine\Root\(Cert Thumbprint...)"
$certPutLocation = "Cert:\LocalMachine\Root\"
$certFile = (Get-ChildItem -Path \\server\file.cer)
$certCheckFile = (Test-Path -Path $certCheckLocation)

if ($certCheckFile -eq $false) {

        If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
        {
            $messageBox.Popup("Please run as an admin.",5,"Proxy Utility",0)
            Break
        } else {
            $certFile | Import-Certificate -CertStoreLocation $certPutLocation
        }
}

Ниже приведен код GUI и некоторые другие вещи, которые изменяют настройки прокси и т.д.

Короче говоря, он берет один сертификат и применяет его к локальной машине. Если пользователь не является администратором, он предлагает перезапустить сценарий от имени администратора. Я намереваюсь масштабировать это методом foreach, чтобы при добавлении сертификата в конкретный сетевой каталог скрипт запускался и пытался установить новый сертификат. Если пользователь не является администратором, он запрашивает ТОЛЬКО, когда ему нужно установить новый сертификат.

Все еще учусь PowerShell, поэтому любая помощь будет принята с благодарностью!

1 ответ1

1

Самый простой способ извлечь отпечаток из файла .cer - создать объект сертификата в powershell и импортировать в него сертификат. После чего вы можете использовать PowerShell для отображения объекта, включая отпечаток большого пальца.

Что-то вроде этого:

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import("PathToCer\cabundle.crt")
$cer.Thumbprint

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .