"PSExec -i"에 대한 Windows 세션 ID를 동적으로 가져옵니다.

"PSExec -i"에 대한 Windows 세션 ID를 동적으로 가져옵니다.

SSH를 통해 PSExec 명령을 푸시하여 Linux 시스템에서 Windows 시스템으로 원격으로 프로그램을 실행하는 PowerShell 줄을 작성하려고 합니다. 세션 ID를 수동으로 쿼리하고 하드 코딩하면 작동하지만 ID가 변경되므로 동적으로 가져오고 싶습니다.

현재 명령은 다음과 같습니다.

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에는 현재 프로세스 ID를 보유하는 기본 변수가 있습니다.

$pid

그러나 여기에 Linux 대상으로 보이는 것에 대한 SSH를 통한 것은 물론 psexec를 통해 이러한 방식으로 비용을 지불받을 수 있다는 응답이 있습니다. 이는 여전히 Windows와 Windows 시스템을 통신하는 반면 Linux 상자로 보이는 SSH 세션과 통신합니다.

psexec를 시작한 후 프로세스 ID 얻기

& 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"

SSH에서 -s '소문자' 매개변수를 무엇에 사용하고 있는지 잘 모르겠습니다... 해당 매개변수의 값을 허용하지 않기 때문입니다... -S '대문자'를 의미했나요? SSH 명령줄

어떤 경우에는

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

매개 변수에 전달되는 값을 지원하지 않는 PsExec의 -s 스위치를 의미했다면...

관련 정보