Powershell ForEach l oop с именем файла в качестве переменной - PullRequest
1 голос
/ 22 января 2020

Я работаю над сценарием, который будет принимать файлы .key в папке и конвертировать их в формат .der через OpenSSL. Я пытаюсь сохранить текущие имена файлов в качестве переменной, чтобы преобразованный сертификат оставил то же имя, только расширение изменится. Ниже приведен код, который я пробовал до сих пор:

$env:path="C:\Source\RFK\RFK Hardening\OpenSSL v1.1.1e\x64\bin"
$env:path="C:\Source\RFK\RFK Hardening\OpenSSL v1.1.1e\x86\bin"

$Keypath = "C:\Source\RFK\RFK Hardening\2. PKI Certificates\RFK PKI Files"
$Location = "C:\Source\RFK\RFK Hardening\2. PKI Certificates\PKI Files\RFK CSR Files"
$Keyfiles = Get-ChildItem -path $Location -Recurse -Include "*local.key"




Get-ChildItem -Path $Keypath -Recurse -Include "*.key" |

ForEach-Object {
    $KeyName = Get-Content $_.fullName

$KeyName | openssl rsa -in $_.FullName.key -out $_.FullName.der -outform DER

}

1 Ответ

0 голосов
/ 22 января 2020

$_.FullName расширяется до полного пути к файлу, также с расширением. Также полностью перезаписывать PATH является злоупотреблением служебным положением и пути должны быть разделены точкой с запятой. Также получение контента через $ KeyName не требуется. $ _ принимает значение из конвейеров, поэтому установка $ KeyName развернет полный путь к содержимому, что недопустимо.

$env:path +=";C:\Source\RFK\RFK Hardening\OpenSSL v1.1.1e\x64\bin;"
$env:path +="C:\Source\RFK\RFK Hardening\OpenSSL v1.1.1e\x86\bin;"
$Keypath = "C:\Source\RFK\RFK Hardening\2. PKI Certificates\RFK PKI Files"
$Location = "C:\Source\RFK\RFK Hardening\2. PKI Certificates\PKI Files\RFK CSR Files"
$Keyfiles = Get-ChildItem -path $Location -Recurse -Include "*local.key"
Get-ChildItem $Keypath -Recurse -Include "*.key" | ForEach {
    $OutFile = $_.Fullname.ToString().Replace(".key", ".dar") 
    # Note you can use Regex operator with Regex '\.key$', '\.dar$'
    openssl rsa -in $_.FullName -out $Outfile -outform DER
}
...