在PowerShell中运行命令提示符命令

时间:2015-10-13 17:12:41

标签: powershell cmd command-prompt

以下是在命令提示符下运行并创建所需证书文件的两个命令:

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'.

一个问题是,当我在命令提示符下的Makecert文件夹中运行makecert和pvk2pfx命令时,我想在父文件夹Makecert级别编写powershell脚本。想知道这样做的正确方法是什么。

更新: 以下命令在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 

1 个答案:

答案 0 :(得分:2)

你现在有2个问题 -

  1. 如果要从基于当前目录的相对路径调用工具,则Powershell需要.\限定。即makecert\makecert.exe无法工作,您需要.\makecert\makecert.exe

  2. 如果您使用&,则后续字符串应仅包含路径和工具名称,任何参数。即& "sometool.exe -a foo -b bar"错误,& "sometool.exe" -a foo -b bar是对的。

  3. 另请注意,除非路径和/或工具名称包含空格或其他特殊字符,否则不需要&,或者由于其他原因路径已存储在字符串中。鉴于您的示例代码,此处并不严格要求。

    所以我建议:

    $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