Динамически получить идентификатор сеанса Windows для «PSExec -i»

Динамически получить идентификатор сеанса Windows для «PSExec -i»

Я пытаюсь написать строку PowerShell для удаленного запуска программы с машины Linux на машину Windows посредством push-команды PSExec через SSH. Если я вручную запрошу идентификатор сеанса и жестко закодирую его, это сработает, но идентификатор изменится, поэтому я хочу динамически его вытащить.

Текущая команда такова:

ssh [email protected] "psexec '\\\\192.168.1.3' -i Invoke-Command -ScriptBlock {query session | grep user | grep -o [0-9]} -s $prgm"

К сожалению, при запуске скрипта возникает следующая ошибка:

The system cannot find the file specified.
Starting Invoke-Command on 192.168.1.3....1.3...
PsExec could not start Invoke-Command on 192.168.1.3:
Binary file C:\Users\user\Desktop\Games\StepMania\Program\StepMania.exe matches

Путь к файлу обусловлен кодом, который находится ранее в скрипте. Он пытается сопоставить аргумент скрипта с путем на машине Windows, который он вытащил из текстового файла. Я могу вставить весь скрипт, если вы считаете, что это необходимо.

решение1

Я не пробовал это с помощью PSExec, но получить текущий pid запущенного процесса очень просто, просто выполнив следующее...

$process = Start-Process -FilePath "notepad" -PassThru
"Process Id is $($process.Id)"

Также обратите внимание, что в PowerShell есть переменная по умолчанию, которая содержит текущий идентификатор процесса.

$pid

Однако вот ответ, который говорит, что вы можете получить оплаченное через psexec таким образом, не говоря уже о SSH к тому, что кажется целью Linux. Обратите внимание, что это все еще разговор Windows с машинами Windows, а не ваш сеанс SSH к тому, что кажется Linux box.

Получить идентификатор процесса после запуска psexec

& psexec -s -d -i $SessionID \\$PCname $Program $FilePath\$FileName |
   Select-String 'process ID (\d+)' | 
   ForEach-Object {$_.Matches.Groups[1].Value}

решение2

ssh [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\" -s $prgm"

Не совсем понимаю, для чего вы используете параметр -s 'lowercase' в SSH... потому что он не принимает значения в этом параметре... Вы имели в виду -S 'uppercase'? командная строка ssh

В таком случае

ssh -S $prgm [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\""

Если вы имели в виду ключ -s PsExec, который тоже не поддерживает передачу каких-либо значений параметру...

Связанный контент