动态获取“PSExec -i”的 Windows 会话 ID

动态获取“PSExec -i”的 Windows 会话 ID

我正在尝试编写一行 PowerShell 代码,通过 SSH 推送 PSExec 命令,从 Linux 计算机远程运行程序到 Windows 计算机。如果我手动查询会话 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

但是,这里有一个回复说,你可以通过这种方式通过 psexec 获得报酬,更不用说通过 SSH 连接到似乎是 Linux 的目标了。请注意,这仍然是 Windows 与 Windows 机器之间的对话,而不是通过 SSH 会话连接到似乎是 Linux 机器的东西。

启动 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 'lowercase' 参数的原因...因为它不接受该参数中的值...您的意思是 -S 'uppercase' 吗? ssh 命令行

在这种情况下

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

如果您指的是 PsExec 的 -s 开关,那么它也不支持将任何值传递给参数......

相关内容