Я все еще изучаю способы PowerShell и испытываю трудности с решением проблемы.
Я хотел бы иметь следующий логический поток:
- Перейдите в \fileserver \certs и извлеките все отпечатки для каждого файла .cer.
- Запустите список удаленных отпечатков для локального сертификата:\ список расположений отпечатков
- Если .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, поэтому любая помощь будет принята с благодарностью!