Problema:
Cuando importo un certificado individualmente, fuera de un foreach, imprime la huella digital según sea necesario; sin embargo, necesito recorrer una lista de archivos .cer en un recurso compartido de archivos para poder ejecutarlos con los certificados actualmente instalados en una máquina local. En el momento en que intento ejecutar la lista de certificados a través de mi foreach, falla.
Código de trabajo (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
Estoy intentando escalar este código de trabajo a un foreach para iterar sobre una lista o archivos .cer. A continuación se muestra mi intento hasta el momento.
Código fallido:
$certGetList = Get-ChildItem -Path \\fileserver\...\Certs
$certGetList | ForEach-Object {
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cert.Import($_)
$cert.Thumbprint
}
Mensaje de error
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:
Respuesta1
Por supuesto... así de sencillo.
Respuesta:
$cert.Import($certGetList + "\" + $_)
De alguna manera, pierde el origen del objeto e intenta encontrar el archivo relativo localmente, en lugar de hacerlo en el recurso compartido de red. Necesitaba dirigirlo explícitamente al recurso compartido de red para cada iteración.