Estoy intentando escribir una línea de PowerShell para ejecutar un programa de forma remota desde una máquina Linux a una máquina con Windows presionando un comando PSExec a través de SSH. Si consulto manualmente el ID de la sesión y lo codifico, funciona, pero el ID cambia, por lo que quiero extraerlo dinámicamente.
El comando actual es este:
ssh [email protected] "psexec '\\\\192.168.1.3' -i Invoke-Command -ScriptBlock {query session | grep user | grep -o [0-9]} -s $prgm"
Desafortunadamente, cuando ejecuto el script, recibo el siguiente error:
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
La ruta del archivo se debe al código anterior del script. Intenta hacer coincidir un argumento de secuencia de comandos con una ruta en la máquina con Windows que extrajo de un archivo de texto. Puedo pegar el script completo si crees que es necesario.
Respuesta1
No he probado esto usando PSExec, pero obtener el pid actual de un proceso iniciado es tan simple como hacer esto...
$process = Start-Process -FilePath "notepad" -PassThru
"Process Id is $($process.Id)"
Además, tenga en cuenta que PowerShell tiene una variable predeterminada que contiene el ID del proceso actual.
$pid
Sin embargo, aquí hay una respuesta que dice que puede recibir el pago a través de psexec de esta manera, y mucho menos a través de SSH a lo que parece ser un objetivo de Linux. Tenga en cuenta que esto sigue siendo una conversación entre Windows y máquinas Windows, frente a su sesión SSH en lo que parece ser una máquina Linux.
Obtenga ID de proceso después de iniciar psexec
& psexec -s -d -i $SessionID \\$PCname $Program $FilePath\$FileName |
Select-String 'process ID (\d+)' |
ForEach-Object {$_.Matches.Groups[1].Value}
Respuesta2
ssh [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\" -s $prgm"
No estoy muy seguro de para qué estás usando el parámetro -s 'minúsculas' en SSH... porque no acepta valores en ese parámetro... ¿Quiso decir -S 'mayúsculas'?
En ese caso
ssh -S $prgm [email protected] "psexec '\\\\192.168.1.3' powershell.exe -Command \"&{query session | grep user | grep -o [0-9]}\""
Si te refieres al modificador -s de PsExec que tampoco admite que se pase ningún valor al parámetro...