2015-02-09 186 views
2

我想導入證書和CA以在PowerShell中使用certutil.exe進行存儲。 這是我的腳本:將絕對路徑傳遞給命令

$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文件)。但是這不應該起到任何作用。

回答

0

最好的猜測。 當它生成$ certFilespec時,它會生成沒有註釋的字符串,因此該命令將看到C:\ Program併發出錯誤消息。

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

C:\ Program Files文件\我的應用\ mycert.pfx

你可以嘗試

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

運行時產生

$certFilespec 

「C:\ Program Files文件\ My App \ mycert.pfx「

1

T RY修改此行:

certutil -p '""' -importPFX $certFilespec 

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

既然你在你的路徑有一個空間,它打破了單一的路徑參數劃分爲多個參數。