以文件名作为变量的 Powershell ForEach 循环

Powershell ForEach loop with Filename as Variable

我正在编写一个脚本,它将获取文件夹中的 .key 文件并通过 OpenSSL 将它们转换为 .der 格式。我试图将当前文件名保留为变量,以便转换后的证书将保持相同的名称,只是扩展名会改变。以下是我到目前为止尝试过的代码:

$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. PKI Certificates\RFK PKI Files"
$Location = "C:\Source\RFK\RFK Hardening. 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

}

$_.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. PKI Certificates\RFK PKI Files"
$Location = "C:\Source\RFK\RFK Hardening. 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
}