Estou tentando escrever uma linha do PowerShell para executar um programa remotamente de uma máquina Linux para uma máquina Windows por meio do envio de um comando PSExec por meio de SSH. Se eu consultar manualmente o ID da sessão e codificá-lo, ele funcionará, mas o ID muda, então quero extraí-lo dinamicamente.
O comando atual é este:
ssh [email protected] "psexec '\\\\192.168.1.3' -i Invoke-Command -ScriptBlock {query session | grep user | grep -o [0-9]} -s $prgm"
Infelizmente, quando executo o script, recebo o seguinte erro:
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
O caminho do arquivo é devido ao código anterior no script. Ele tenta combinar um argumento de script com um caminho na máquina Windows extraído de um arquivo de texto. Posso colar o script inteiro se você achar necessário.
Responder1
Eu não tentei isso usando PSExec, mas obter o pid atual de um processo iniciado é tão simples quanto fazer isso ...
$process = Start-Process -FilePath "notepad" -PassThru
"Process Id is $($process.Id)"
Além disso, observe que o PowerShell possui uma variável padrão que contém o ID do processo atual.
$pid
No entanto, aqui está uma resposta que diz que você pode receber o pagamento via psexec dessa forma, muito menos por SSH para o que parece ser um alvo Linux. Observe que isso ainda está conversando entre máquinas Windows e Windows, em vez de sua sessão SSH com o que parece ser uma caixa Linux.
Obtenha o ID do processo após iniciar o psexec
& psexec -s -d -i $SessionID \\$PCname $Program $FilePath\$FileName |
Select-String 'process ID (\d+)' |
ForEach-Object {$_.Matches.Groups[1].Value}
Responder2
ssh [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\" -s $prgm"
Não tenho certeza para que você está usando o parâmetro -s 'minúsculas' no SSH... porque ele não aceita valores nesse parâmetro... Você quis dizer -S 'maiúsculas'?
Nesse caso
ssh -S $prgm [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\""
Se você quis dizer a opção -s do PsExec que também não suporta nenhum valor sendo passado para o parâmetro ...