如何判断启动作业命令启动了哪些进程



我有一个(继承)一个PowerShell脚本,该脚本通过使用Start-Job cmdlet和-FilePath参数调用其他PowerShell脚本来调用它们。例如,我有一个不执行任何操作的脚本:

Start-Sleep -Seconds 86400

我可以通过作业调用:

PS> Start-Job -Name "Test Job" -FilePath ".Wait-AllDay.ps1"
Id Name     PSJobTypeName State   HasMoreData Location  Command                        
-- ----     ------------- -----   ----------- --------  -------                        
2  Test Job BackgroundJob Running True        localhost Start-Sleep...
PS> Get-Job -Id 2
State         : Running
HasMoreData   : True
StatusMessage : 
Location      : localhost
Command       : Start-Sleep -Seconds (60*60*24)
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 0c0e2c32-cbc5-4d70-b7cb-28771626cf20
Id            : 2
Name          : Test Job
ChildJobs     : {Job3}
PSBeginTime   : 25/01/2016 15:06:22
PSEndTime     : 
PSJobTypeName : BackgroundJob

有没有简单可靠的方法来找出与此工作相关的流程(我相信这将是一个额外的 powershell.exe)?显然,这在仅使用一个作业进行测试时很容易,但在服务器上,我可能会同时运行其中的许多作业。

我为什么要做/知道这个?

我担任新角色,在具有多个计划任务的服务器上工作,这些任务运行各种脚本。其中一些调用我的前任选择使用 Start-Job 调用的其他脚本,可能是因为它们可以长时间运行(数小时)并希望它们并行工作。偶尔他们似乎被卡住了,我想杀死他们,但不想冒险阻止仍然健康的东西。

沿着这条路开始,对于如何匹配作业和流程,我可能会更加好奇,因为我很可能会在不久的将来开始重写其中一些脚本。

使用 *-Job cmdlet 可能比摆弄实际进程更好。使用 Get-Job列出现有作业:

PS C:\> 获取工作ID 名称 PSJobTypeName State HasMoreData Location 命令--   ----    -------------   -----       -----------   --------      -------2 作业2 后台作业运行假本地主机做一些4 作业4 背景作业已完成 真正的本地主机获取其他

Command 属性保存作业正在运行的脚本块的内容。

(Get-Job -Id 2).Command

State 属性显示作业的当前状态(正在运行、已完成、失败、已阻止等)。HasMoreData 属性指示作业是否具有可通过 Receive-Job 获取的输出。

Receive-Job -Id 4

可以通过 Stop-Job 停止作业,Remove-Job从作业列表中删除已终止的作业。

有关后台作业的详细信息,请参阅此处。

据我所知,"我能知道哪个进程与每个工作匹配"的答案是否定的

但是,似乎有一些线索可以说明哪些流程与作业匹配。

  1. 它们有一个命令行,例如:

    "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -Version 4.0 -s -NoLogo -NoProfile

  2. 它们是另一个 powershellpowershell_ise.exe进程的子进程.exe具体取决于它们的调用方式。如果父进程由任务管理器或其他调度代理调用,则进程命令行中很可能有一个脚本名称,这可能会有所帮助。就我而言,这不是太大的帮助,因为每个计划任务都会生成~4个powershell.exe后台进程。

  3. 如果你有每个作业启动时间的详细信息(如果可以运行 Get-Job cmdlet 以返回作业详细信息,则很容易),则可以根据时间戳将作业与进程进行匹配,但即使在简单的测试中也没有完全匹配;作业和进程在启动时相隔 1-2 秒。

除此之外,我找不到任何有用的方法来识别与每个工作相关的实际流程。

相关内容

  • 没有找到相关文章

最新更新