谁能帮助我如何在PowerShell脚本中使用Kleopatra加密文件?

时间:2019-04-11 15:47:11

标签: powershell gnupg

我正在尝试使用Powershell中的Kleopatra将.txt文件加密为.txt.gpg文件。但是在PowerShell中出现错误。任何帮助将不胜感激。

下面是我尝试过的代码段:

$kleopatraPath = "C:\Program Files (x86)\GNU\GnuPG\bin\kleopatra.exe"
$inputFile = "D:\Work\data.txt"
$expectedOutputFile = "D:\Work\data.txt.gpg"
$encryptionKeyPath = "D:\Work\key.asc"

Invoke-Item $kleopatraPath {-i --import-certificate $encryptionKeyPath -e -- encrypt $inputFile }

预期结果:输出文件“ D:\ Work \ data.txt.gpg”。

我遇到的错误:

Invoke-Item : A positional parameter cannot be found that accepts argument '-i
--import-certificate "D:\Work\QA Batches\CCI\CCI-10050 FW Conversant UC4 Job
request\encryption key\narnia.epsilon.com.asc" -e -- encrypt "D:\Work\QA
Batches\CCI\CCI-10050 FW Conversant UC4 Job request\test\
etInvAdjust_invadjustcre_2223539_1_2019-04-10_10-49-02-856 - Copy2.xml"'.
At line:1 char:1
+ Invoke-Item "C:\Program Files (x86)\GNU\GnuPG\bin\kleopatra.exe" {-i  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Item], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeItemCommand

1 个答案:

答案 0 :(得分:0)

从TechNet上查看运行此类外部工具的定义方法。

PowerShell: Running Executables

按照安斯加的建议:

  
      
  1. 呼叫运营商和Technet
  2.   
     

为什么:用于将字符串视为SINGLE命令。对交易有用   带有空格。

     

在PowerShell V2.0中,如果您正在运行7z.exe(7-Zip.exe)或其他   以数字开头的命令,您必须使用命令   调用运算符&。

     

PowerShell V3.0解析器现在更加智能,在这种情况下,您不必   需要&了。

     

详细信息:运行命令,脚本或脚本块。呼叫接线员,   也称为“调用运算符”,使您可以运行以下命令   存储在变量中并由字符串表示。因为打电话   操作员不解析命令,无法解释命令   参数

# Example: 

& 'C:\Program Files\Windows Media Player\wmplayer.exe' "c:\videos\my home video.avi" /fullscreen
  

当外部命令具有很多参数时,事情可能会变得棘手   或者参数或路径中有空格!

     

对于空格,您必须嵌套引号,而结果却不是   永远清楚!

     

在这种情况下,最好像这样将所有内容分开:

$CMD = 'SuperApp.exe'
$arg1 = 'filename1'
$arg2 = '-someswitch'
$arg3 = 'C:\documents and settings\user\desktop\some other file.txt'
$arg4 = '-yetanotherswitch'

& $CMD $arg1 $arg2 $arg3 $arg4

# or same like that:

$AllArgs = @('filename1', '-someswitch', 'C:\documents and settings\user\desktop\some other file.txt', '-yetanotherswitch')

& 'SuperApp.exe' $AllArgs

或启动过程。

  
      
  1. 启动过程(启动/ SAP)Technet
  2.   
     

为什么:启动一个进程并返回.Net进程对象,如果   提供了PassThru。它还允许您控制启动过程的环境(用户配置文件,输出重定向   等等)。您还可以使用Verb参数(右键单击文件,   动作列表),以便例如播放wav文件。

     

详细信息:执行一个程序,返回程序的过程对象。   应用。允许您控制文件(动词   以上所述)并控制应用运行的环境。   您还可以等待过程结束。你也可以   订阅流程Exited事件。

# Example: 

# starts a process, waits for it to finish and then checks the exit code.
$p = Start-Process ping -ArgumentList "invalidhost" -wait -NoNewWindow -PassThru
$p.HasExited
$p.ExitCode


# to find available Verbs use the following code.

$startExe = new-object System.Diagnostics.ProcessStartInfo -args PowerShell.exe
$startExe.verbs