如何解决尝试将多个变量解析为 openssl 命令的 powershell foreach 循环
我正在尝试利用 Powershell 使用 Openssl 自动创建一些 PFX 证书。 我正在尝试创建一个 foreach 循环,该循环使用私有 pem 密钥和颁发的证书,并使用 openssl pkcs12 命令推出 pfx 文件。 我试图创建一个对象,foreach 循环可以在该对象上获取数据,但我认为没有将正确的值解析到 openssl 命令。
$openssldir = "C:\openssl-1.1\x64\bin"
$certlocation = "C:\openssl-1.1\x64\bin\Certs"
$keylocation = "C:\openssl-1.1\x64\bin\Keys"
$pfxlocation = "C:\openssl-1.1\x64\bin\PFX"
$certs = (Get-ChildItem -path $certlocation -File).Name
$keys = (Get-ChildItem -path $keylocation -File).Name
$certpath = $certs | foreach{".\Certs\" + $_}
$keypath = $keys | foreach{".\Keys\" + $_}
set-location -Path $openssldir
$a = @()
$obj = New-Object PSObject
$obj | Add-Member -type NoteProperty -Name 'cert' -Value $certpath
$obj | Add-Member -Type NoteProperty -Name 'key' -Value $keypath
$a += $obj
ForEach($item in $a){
$pfx = $item.cert
$pfxfile = $pfx.replace(".cer",".pfx")
.\openssl.exe pkcs12 -export -out PFX/$pfxfile -inkey $item.key -in $item.cert -password pass:
}
我可以手动运行命令,它没有问题,我什至可以使用数组中的特定条目运行命令,例如:
.\openssl.exe pkcs12 -export -out PFX/test.pfx -inkey $item.key[0] -in $item.cert[0] -password pass:
我可能只是有一些语法错误或一些愚蠢的事情,因此感谢您的帮助!
瑞恩
解决方法
当您构建 $obj
对象时,您只会创建一个对象,其属性包含 $certpath
路径数组,另一个属性包含 $keypath
路径数组。我相信您的意图是创建包含一个匹配的 certpath 和 keypath 的单独对象。如果是这样,您需要一些额外的逻辑来进行匹配,并使用一些循环将适当的单个证书路径和密钥路径放在每个 $obj 中。
不幸的是,我无法测试此代码,但我认为它应该可以工作。 foreach
变量上的 $a
循环是与您的代码的主要区别,也是证书与密钥匹配的地方。我还将 pfx 文件名的代码移到此处。
$openssldir = 'C:\openssl-1.1\x64\bin'
$certlocation = 'C:\openssl-1.1\x64\bin\Certs'
$keylocation = 'C:\openssl-1.1\x64\bin\Keys'
$pfxlocation = 'C:\openssl-1.1\x64\bin\PFX'
$opensslExe = "$openssldir\openssl.exe"
$certs = Get-ChildItem -Path $certlocation -File
$keys = Get-ChildItem -Path $keylocation -File
$a = foreach ($cert in $certs) {
[PSCustomObject]@{
cert = $cert.FullName
key = ($keys |
Where-Object( { $_.BaseName -like $cert.BaseName }) |
Select-Object -First 1).FullName
pfxfile = $cert.Name.Replace('.cer','.pfx')
}
}
ForEach ($item in $a) {
& $opensslExe pkcs12 -export -out "$pfxlocation/$($item.pfxfile)" -inkey $item.key -in $item.cert -password pass:
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。