PowerShell для копирования в буфер обмена с помощью -File - PullRequest
1 голос
/ 23 февраля 2020

У меня есть приложение, которое может вызывать / выполнять Powershell и отправлять команды при этом.

К сожалению, часть тех команд, которые мне нужны для отправки, содержит многострочный текст с кавычками.

Из-за этого моему решению необходимо сохранить эти данные в переменной / файле, на которые можно ссылаться через powershell, когда приложение отправляет аргументы команды.

Я могу сохранить это как Copy.PS1

$command = 'Set-Clipboard -Value @"
Final text
Text also here
"@'

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)

Затем я пытаюсь вызвать Powershell при отправке аргументов:

powershell -ExecutionPolicy bypass -EncodedCommand $encodedCommand -File "Copy.PS1"

Этот процесс не работает. Также нет ошибок, которые отображаются. Он просто не обновляет буфер обмена.

Однако, когда я открываю Powershell ISE и запускаю его без ссылки на файл, все работает:

$command = 'Set-Clipboard -Value @"
Final text
Text also here
"@'

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)

powershell -ExecutionPolicy bypass -EncodedCommand $encodedCommand

Может кто-нибудь объяснить, почему это поведение так отличается?

1 Ответ

1 голос
/ 23 февраля 2020

Я бы рекомендовал сделать это как можно более простым. Если вы хотите, чтобы строка, пересекающая несколько строк, копировалась в буфер обмена, сделайте именно это ... не более:

$HereString = @'
Some arbitrary
String running
accross multiple
lines
'@
Set-Clipboard -Value $HereString

Сохраните это в файл «Copy.PS1» и запустите его с помощью этой командной строки. :

powershell -ExecutionPolicy bypass -File Copy.PS1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...