![Новичок в powershell и мой foreach постоянно падает. Пытаюсь перебрать список файлов сертификатов, но он терпит неудачу. Вероятно, просто](https://rvso.com/image/1557608/%D0%9D%D0%BE%D0%B2%D0%B8%D1%87%D0%BE%D0%BA%20%D0%B2%20powershell%20%D0%B8%20%D0%BC%D0%BE%D0%B9%20foreach%20%D0%BF%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%BE%20%D0%BF%D0%B0%D0%B4%D0%B0%D0%B5%D1%82.%20%D0%9F%D1%8B%D1%82%D0%B0%D1%8E%D1%81%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B1%D1%80%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2%2C%20%D0%BD%D0%BE%20%D0%BE%D0%BD%20%D1%82%D0%B5%D1%80%D0%BF%D0%B8%D1%82%20%D0%BD%D0%B5%D1%83%D0%B4%D0%B0%D1%87%D1%83.%20%D0%92%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D0%BE%2C%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE.png)
Проблема:
Когда я импортирую сертификат индивидуально, вне 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 + "\" + $_)
Каким-то образом он теряет источник объекта и пытается найти соответствующий файл локально, а не на сетевом ресурсе. Мне нужно было явно направить его на сетевой ресурс для каждой итерации.