Problema:
Quando importo um certificado individualmente, fora do foreach, ele imprime a impressão digital conforme necessário; no entanto, preciso percorrer uma lista de arquivos .cer em um compartilhamento de arquivos para poder executá-los nos certificados atualmente instalados em uma máquina local. No momento em que tento executar a lista de certificados no meu foreach, ela falha.
Código de trabalho (individualmente)
<# Notice the explicite .cer file #>
$certGet = Get-ChildItem -Path \\fileserver\...\Certs\cert.cer
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($certGet)
$cert.Thumbprint
Estou tentando dimensionar esse código funcional em um foreach para iterar em uma lista ou arquivos .cer. Abaixo está minha tentativa até agora.
Código com falha:
$certGetList = Get-ChildItem -Path \\fileserver\...\Certs
$certGetList | ForEach-Object {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($_)
$cert.Thumbprint
}
Mensagem de erro
ERROR: Exception calling "Import" with "1" argument(s): "The system cannot find the file specified.
ERROR: "
list_thumbprints_test.ps1 (18, 2): ERROR: At Line: 18 char: 2
ERROR: + $cert.Import($_)
ERROR: + ~~~~~~~~~~~~~~~~
ERROR: + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
ERROR: + FullyQualifiedErrorId : CryptographicException
ERROR:
Responder1
Claro... tão simples.
Responder:
$cert.Import($certGetList + "\" + $_)
De alguma forma, ele perde a origem do objeto e tenta encontrar o arquivo relativo localmente, em vez de no compartilhamento de rede. Eu precisava direcioná-lo explicitamente para o compartilhamento de rede para cada iteração.