Motivação: Estou tentando testar alguns comandos relacionados ao processo com um simples trabalho de powershell. No entanto, todos os trabalhos do powershell são denominados "powershell" na tabela de processos. Portanto, preciso do identificador de processo que posso usar para filtrar Get-Process
a saída.
Portanto, a pergunta 'maior' pode ser mais fácil de responder, mas, do jeito que está, acho que tenho uma solução se eu pudesse conectar um trabalho do powershell ao seu ID de processo ("Handle").
Como obtenho o ID do processo de um trabalho do powershell? (este não é o JobID).
$job = Start-Job -Name $jobName -ScriptBlock { while($true){sleep -Seconds 1}}
$processes = Get-Process
$jobHandle = ???
$jobProcess = $processes |? {$_.Handle -eq $jobHandle}
Como obtenho as informações ausentes simbolizadas por '???' ?
Lidando com o problema XY e reformulado de forma mais geral, se isso for impossível porque tudo é adquirido na sessão atual do powershell, a grande questão é: como crio um processo arbitrariamente nomeado ou manipulado que eu possa fazer qualquer coisa, do powershell, para testando?
# how do I start this code block as an arbitrary named process?
name="test-Get-Foo.1.2"
{
while($true){
sleep -Seconds 2
}
}
# ???
$proc=Get-Process |? {$_.Name -like "test-Get-Foo*"}
Em relação à primeira pergunta, até onde eu sei, a
Job
classe não expõe o processo subjacente gerado nos bastidores e a maneira como você poderia obtê-loProcessId
seria fazer uma comparação antes e depois :Sobre a segunda questão, parafraseada:
Para isso você pode usar a
NamedPipeConnectionInfo
Classe . Um exemplo simples: