2015-10-13 175 views
0

提示命令以下是在命令提示符下運行,並創建所需的證書文件兩個命令:運行命令在PowerShell中

makecert –sv <cnName>.pvk -n "cn=<cnName>" <cnName>.cer -r -eku 1.3.6.1.5.5.7.3.1 
pvk2pfx -pvk <cnName>.pvk -spc <cnName>.cer -pfx <cnName>.pfx -po <password> 

我嘗試使用下面的代碼在PowerShell中運行相同的命令:

$cnName = <sampleCnName> + ".com" 
$pvkName = $cnName + ".pvk" 
$cerName = $cnName + ".cer" 
$pfxName = $cnName + ".pfx" 
$certificatePassword = <password> 

& "Makecert\makecert –sv $pvkName -n "cn=$cnName" $cerName -r -eku 1.3.6.1.5.5.7.3.1" 
& "Makecert\pvk2pfx -pvk $pvkName -spc $cerName -pfx $pfxName -po $certificatePassword" 

的當前錯誤是

& : The module 'Makecert' could not be loaded. For more information, run 'Import-Module Makecert'. 

的一個問題是,當我運行makec ert和pvk2pfx命令來自命令提示符下的Makecert文件夾,我想將powershell腳本寫入父文件夾Makecert級別。想知道做這件事的正確方法是什麼。

更新: 下面的命令在PowerShell中的工作:

$currentDirectory = Split-Path $Script:MyInvocation.MyCommand.Path 
& "$currentDirectory\Makecert\makecert.exe" –sv actualCnName.pvk -n "cn=actualCnName" actualCnName.cer -r -eku 1.3.6.1.5.5.7.3.1 
+0

@PetSerAl請參閱我的評論下面latkin的答案。 – Romonov

+0

@RyanBemrose,請參閱我對Latkin的回答下面的評論 – Romonov

回答

2

你有2個問題,現在 -

  1. 如果你想調用基於當前的相對路徑的工具目錄,Powershell需要.\資格。即makecert\makecert.exe將不起作用,您需要.\makecert\makecert.exe

  2. 如果使用&,隨後的字符串應當只包含路徑和工具的名稱,任何參數。即& "sometool.exe -a foo -b bar"是錯誤的,& "sometool.exe" -a foo -b bar是正確的。

還要注意,不需要&除非路徑和/或工具的名稱包含空格或其他特殊字符或路徑已被存儲在其他原因的字符串。鑑於你的示例代碼,這裏並不是必須的。

因此,我建議:

$cnName = <sampleCnName> + ".com" 
$pvkName = $cnName + ".pvk" 
$cerName = $cnName + ".cer" 
$pfxName = $cnName + ".pfx" 
$certificatePassword = <password> 

.\makecert\makecert.exe –sv $pvkName -n "cn=$cnName" $cerName -r -eku 1.3.6.1.5.5.7.3.1 
.\makecert\pvk2pfx.exe -pvk $pvkName -spc $cerName -pfx $pfxName -po $certificatePassword 
+0

我試過了: 。\ Makecert \ makecert.exe -sv $ pvkName -n「cn = $ cnName」$ cerName -r -eku 1.3.6.1.5.5.7.3。 1 它給出的錯誤: 術語'。\ Makecert \ makecert.exe'不被識別爲cmdlet的名稱,函數... 我也嘗試過: $ currentDirectory = Split-Path $ Script:MyInvocation .MyCommand.Path 。\ $ currentDirectory \ Makecert \ makecert.exe -sv $ pvkName -n「cn = $ cnName」$ cerName -r -eku 1.3.6.1.5.5.7.3.1 '。\ D:\ CSoft \ 2015-08-11_Task1 \ Makecert \ makecert.exe'未被識別爲cmdlet的名稱...錯誤 – Romonov

+0

您確定該工具實際上位於該路徑嗎? 'dir。\ makecert \ makecert.exe'給你什麼? – latkin

+0

命令'dir。\ Makecert \ makecert.exe'給出'dir:無法找到路徑'C:\ WINDOWS \ system32 \ Makecert \ makecert.exe',因爲它不存在。' 命令'dir。\ $ currentDirectory \ Makecert \ makecert.exe'給出'無法找到C:\ WINDOWS \ system32 \ D:\ CSoft \ 2015-08-11_Task1 \ Makecert \ makecert.exe'因爲它不存在。但是命令:'dir $ currentDirectory \ Makecert \ makecert.exe'正在查找makecert.exe文件: '-a ---- 2012年10月1日上午9:13 55632 makecert.exe' – Romonov