刚接触 powershell,foreach 一直失败。尝试迭代证书文件列表,但失败了。可能很简单

刚接触 powershell,foreach 一直失败。尝试迭代证书文件列表,但失败了。可能很简单

问题:

当我在 foreach 之外单独导入证书时,它会根据需要打印指纹;但是,我需要遍历文件共享上的 .cer 文件列表,以便我可以针对本地计算机当前安装的证书运行它们。当我尝试通过 foreach 运行证书列表时,它失败了。

工作代码(单独)

<# 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

我正在尝试将此工作代码扩展为 foreach 以迭代列表或 .cer 文件。以下是我迄今为止的尝试。

失败代码:

$certGetList = Get-ChildItem -Path \\fileserver\...\Certs

$certGetList | ForEach-Object {
    $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
    $cert.Import($_)
    $cert.Thumbprint
}

错误信息

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:

答案1

当然...就这么简单。

回答:

$cert.Import($certGetList + "\" + $_)

不知何故,它失去了对象的来源,并尝试在本地而不是在网络共享上查找相关文件。我需要在每次迭代中明确将其指向网络共享。

相关内容