Powershell / c со специальными символами (PsExec / EncodedCommand) - PullRequest
2 голосов
/ 05 августа 2020

Я пытаюсь настроить autologon.exe с помощью командной строки (через PsExe c). Однако специальные символы в пароле вызывают проблемы.

Учитывая этот пароль: I'vegotspe"cia"char@ters

Эта команда работает:

Start-Process 'C:\Autologon.exe' -ArgumentList 'username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'

Однако, поскольку я использую PsExe c, мне нужно выполнить вызов с помощью «/ c», поэтому у меня есть следующая команда.

powershell.exe /c  "Start-Process 'C:\Autologon.exe' -ArgumentList 'username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'"

Эта команда не выводит никаких ошибок, но она тоже не работает. Это работает, если у меня нет двойных кавычек. Есть идеи, как я могу заставить это работать?

Я использую PyPsexe c поэтому, как только я получу указанную выше команду, работаю; вызов будет выглядеть так:

c.run_executable("powershell.exe", arguments=''' /c Start-Process 'C:\Autologon.exe' -ArgumentList 'username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula' ''')

UPDATE 1: Просто попробовал EncodedCommand, как предложил @lit, но у меня, похоже, такая же проблема с синтаксисом, поскольку ее нужно заключить в кавычки.

КОМАНДА:

[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes("Start-Process 'C:\Autologon.exe' -ArgumentList 'username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'"))

ВЫХОД:

ine:1 char:140
+ ... ess 'C:\Autologon.exe' -ArgumentList 'username','hostname','"I''vegot ...
+                                                                  ~
Missing ')' in method call.
At line:1 char:140
+ ... username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'"))
+                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token 'I''vegotspe\"cia\"char@ters"','/accepteula'"' in expression or statement.
At line:1 char:184
+ ... username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'"))
+                                                                        ~
Unexpected token ')' in expression or statement.
At line:1 char:185
+ ... username','hostname','"I''vegotspe\"cia\"char@ters"','/accepteula'"))
+                                                                         ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

1 Ответ

0 голосов
/ 05 августа 2020

Я предлагаю сохранить пароль в переменной. Тогда воспользуйтесь оператором вызова &. Это может сработать лучше, чем попытка передать странную строку.

& C:\Autologon.exe /accepteula username hostname $password 

Это может помочь поместить все аргументы в переменные, в зависимости от того, как идет /accepteula.

Но если вы собираетесь запускать его из своего эквивалента c psexe - что подразумевает использование командного интерпретатора - почему Powershell?

Возможно, сложный пароль бесполезен, если вы просто запустите его командную строку - не знаю, тестировали ли вы. Упростить жизнь, сделав ее длинной строкой с «достаточной» сложностью, могло бы облегчить жизнь. Или вы можете установить переменную для своего пароля с помощью команды SET.

set PWD=I'vegotspe"cia"char@ters"
C:\Autologon.exe /accepteula username hostname %PWD%

Может потребоваться CMD /C перед исполняемым файлом, в зависимости от того, как работает ваша Python вещь. Нет смысла добавлять дополнительные интерпретаторы, такие как Powershell, если они вам не нужны.

...