Может кто-нибудь помочь мне, как зашифровать файл с помощью Kleopatra в сценариях PowerShell? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь зашифровать файл .txt в файл .txt.gpg, используя Kleopatra в powershell.Но получаю ошибку в 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 голосов
/ 12 апреля 2019

См. Определенные методы запуска внешних инструментов, например, из TechNet.

PowerShell: запуск исполняемых файлов

Согласно предложению Ансгара:

Оператор вызова и техника

Почему: используется для обработки строки как ОДНОЙ команды.Полезно для работы с пробелами.

В 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

Или Start-Process.

Start-Process (start / saps) Technet

Зачем: запускает процесс и возвращает объект процесса .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 
...