Eu ainda estou aprendendo os caminhos do PowerShell e estou tendo dificuldades em resolver um problema.
Eu gostaria de ter o seguinte fluxo lógico:
- Vá para \ fileserver \ certs e puxe todas as impressões digitais de cada arquivo .cer existente
- Execute a lista de impressões digitais remotas em relação à cert local: \ lista de locais das impressões digitais
- Se um .cer não estiver instalado localmente com base em uma impressão digital ausente, instale o .cer do \ fileserver \ certs no cert: \ location
Há um pouco mais de lógica no meio, mas no geral é isso que eu procuro realizar. Meu principal problema é extrair a impressão digital dos arquivos .cer remotos ou determinar se eles estão instalados localmente de uma maneira diferente (até onde eu sei, a impressão digital é a maneira mais lógica, mas estou totalmente aberto a sugestões).
Eu poderia apenas instalar todos os certificados no diretório toda vez que meu script fosse executado, mas temo sobrecarga desnecessária, e o show stopper é que ele exigiria direitos de administrador toda vez que fosse executado, em vez de no primeiro lançamento ou detecção de novos certs.
O principal problema é que não consigo coletar a impressão digital do arquivo .cer, e as sugestões do Google são infrutíferas até o momento. Se eu puder descobrir como puxar a impressão digital do agente remoto, tenho certeza de que poderia descobrir a lógica necessária desse ponto.
Meu código atual:
#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
}
}
Abaixo, este é o código da GUI e algumas coisas que alteram a configuração do proxy, etc.
Em suma, é necessário um único cer e aplica-o à máquina local. Se o usuário não for admin, ele solicita que ele reinicie o script como admin. Eu pretendo escalar isso de uma forma foreach para que, quando um cer é adicionado a um diretório de rede específico, o script irá notar no lançamento e tentar instalar o novo certificado. Se o usuário não for admin, ele solicitará APENAS quando precisar instalar um novo certificado.
Ainda aprendendo o powershell, então qualquer ajuda seria muito apreciada!