使用绝对路径传递变量到命令

时间:2015-02-09 11:16:11

标签: powershell

我正在尝试使用PowerShell中的certutil.exe导入证书和CA进行存储。 这是我的剧本:

$appDir="C:\Program Files\My App"
$certFilespec = $appDir + "\mycert.pfx"
certutil -p '""' -importPFX $certFilespec
$certFilespec = $appDir + "\myca.crt"
certutil -f -addStore Root $certFilespec

除了第三行之外的所有内容都成功执行。错误是:

PS C:\> certutil -p '""' -importPFX $certFilespec
CertUtil: -importPFX command FAILED: 0x80070002 (WIN32: 2)
CertUtil: The system cannot find the file specified.
PS C:\>

当我使用字符串而不是$ certFilespec

certutil -p '""' -importPFX "C:\Program Files\My App\mycert.pfx"
certutil -f -addStore Root "C:\Program Files\My App\myca.crt"

一切都成功执行。我还发现,当我使用相对路径时,它可以正常工作

PS C:\> cd '.\Program Files\My App'
$certFilespec=".\mycert.pfx"
certutil -p '""' -importPFX $certFilespec
CertUtil: -importPFX command completed successfully
PS C:\Program Files\My App>
一切正常。所以我猜在使用绝对路径时引用有一些问题。我不明白的是,对于同一个命令,只有不同的选项(-addStore / -importPFX)它的工作方式不同。

我导入的文件是PKCS12证书+私钥(.pfx文件)。和CA的证书(.crt文件)。但这不应该发挥任何作用。

2 个答案:

答案 0 :(得分:1)

尝试修改此行:

certutil -p '""' -importPFX $certFilespec

certutil -p '""' -importPFX "$certFilespec"

由于路径中有空格,因此将单路径参数分解为多个参数。

答案 1 :(得分:0)

最好的猜测。 当它生成$ certFilespec时,它生成没有注释的字符串,因此命令将看到C:\ Program并发出错误。

$appDir="C:\Program Files\My App"
$certFilespec = $appDir + "\mycert.pfx"
$certFilespec

C:\ Program Files \ My App \ mycert.pfx

你可以尝试

$appDir='"C:\Program Files\My App\'
$certFilespec = $appDir + 'mycert.pfx"'

运行时产生

$certFilespec

“C:\ Program Files \ My App \ mycert.pfx”

相关问题