正在尝试使用PowerShell获取进程计数的数目

正在尝试使用PowerShell获取进程计数的数目,powershell,Powershell,我正在尝试获取要显示的进程数。条件是我有一个父进程ID和子进程我可以检索并显示父进程和子进程,但我想显示与父进程相关的子进程计数 请找到我放进去的那段脚本 使用Java进程编写主机ADS服务 调用命令-计算机SM06388.dom1.e-ssi.net-脚本块{ 获取WmiObject-Class Win32\u服务-Filter name='OpenLink\u ADS\u Fenix\u PCT' }| ForEach对象{ 如果$状态-均衡器正在运行{ 写入主机$\.PSComputerN

我正在尝试获取要显示的进程数。条件是我有一个父进程ID和子进程我可以检索并显示父进程和子进程,但我想显示与父进程相关的子进程计数

请找到我放进去的那段脚本

使用Java进程编写主机ADS服务 调用命令-计算机SM06388.dom1.e-ssi.net-脚本块{ 获取WmiObject-Class Win32\u服务-Filter name='OpenLink\u ADS\u Fenix\u PCT' }| ForEach对象{ 如果$状态-均衡器正在运行{ 写入主机$\.PSComputerName$\.Name$\.State$\.StartMode-ForegroundColor绿色 获取WmiObject-Class Win32_进程-Filter Name='java_svc_wrapper.exe'| ForEach对象{ 获取WmiObject Win32_进程-筛选器ParentProcessId=$$\进程ID }|格式化表ProcessName、ProcessId、句柄、ParentProcessId-自动 }否则{ 写入主机$\.PSComputerName$\.Name$\.State$\.StartMode-ForegroundColor红色 } } 我通过脚本获得的输出粘贴在下面

ADS services with Java processes sm06388.dom1.e-ssi.net OpenLink_ADS_FENIX_PCT Running Auto ProcessName ProcessId Handle ParentProcessId ----------- --------- ------ --------------- java.exe 12164 12164 5520 java.exe 9392 9392 5520 java.exe 12892 12892 5520 java.exe 10396 10396 5520 java.exe 9868 9868 5520 java.exe 11584 11584 5520 java.exe 14760 14760 5520 java.exe 9740 9740 5520 java.exe 12232 12232 5520 java.exe 16432 16432 5520 java.exe 15688 15688 5520
这里我只是想显示进程的计数。有谁能帮助我如何显示此计数。

将它们添加到数组,并显示数组长度或将它们分组:

$results = @()

write-host "ADS services with Java processes"
invoke-command -computer SM06388.dom1.e-ssi.net -scriptblock {
    get-wmiobject -Class win32_service -Filter "name='OpenLink_ADS_Fenix_PCT'"
} | foreach-object {
    if ($_.State -eq "running") {
        write-host $_.PSComputerName  $_.Name $_.State $_.StartMode -  ForegroundColor green
        Get-WmiObject -Class Win32_Process -Filter "Name='java_svc_wrapper.exe'"| 
        ForEach-Object {
            $results += Get-WmiObject Win32_Process -Filter  "ParentProcessId=$($_.ProcessId)"
        }
    }
    else {
        write-host $_.PSComputerName $_.Name $_.State $_.StartMode -ForegroundColor red }
    }

    $results

将它们添加到数组中,并显示数组长度或将它们分组:

$results = @()

write-host "ADS services with Java processes"
invoke-command -computer SM06388.dom1.e-ssi.net -scriptblock {
    get-wmiobject -Class win32_service -Filter "name='OpenLink_ADS_Fenix_PCT'"
} | foreach-object {
    if ($_.State -eq "running") {
        write-host $_.PSComputerName  $_.Name $_.State $_.StartMode -  ForegroundColor green
        Get-WmiObject -Class Win32_Process -Filter "Name='java_svc_wrapper.exe'"| 
        ForEach-Object {
            $results += Get-WmiObject Win32_Process -Filter  "ParentProcessId=$($_.ProcessId)"
        }
    }
    else {
        write-host $_.PSComputerName $_.Name $_.State $_.StartMode -ForegroundColor red }
    }

    $results

这可能是一个额外的调用,但请尝试Get Process,显式查找有问题的processName并计算结果:

(Get-Process -Computer hostname.com -Name 'javaw').count

这可能是一个额外的调用,但请尝试Get Process,显式查找有问题的processName并计算结果:

(Get-Process -Computer hostname.com -Name 'javaw').count

谢谢Maigi和4c74356b41。在你的帮助下,我把它弄明白了

$results = @()

write-host "ADS services with Java processes"
invoke-command -computer SM06388.dom1.e-ssi.net -scriptblock {get-wmiobject   -Class win32_service -Filter "name='OpenLink_ADS_Fenix_PCT'"} | foreach-object {
if ($_.State -eq "running") 
{write-host $_.PSComputerName  $_.Name $_.State $_.StartMode -   ForegroundColor green
Get-WmiObject -Class Win32_Process -Filter "Name='java_svc_wrapper.exe'"|     ForEach-Object{
$results += (Get-WmiObject Win32_Process -Filter  "ParentProcessId=$($_.ProcessId)").count} 
Write-host "No.of Child Java process $results" -ForegroundColor green
}
else 
{write-host $_.PSComputerName $_.Name $_.State $_.StartMode -ForegroundColor  red }
}
预期产出:

ADS services with Java processes
sm06388.dom1.e-ssi.net OpenLink_ADS_FENIX_PCT Running Auto
No.of Child Java process 11

谢谢Maigi和4c74356b41。在你的帮助下,我把它弄明白了

$results = @()

write-host "ADS services with Java processes"
invoke-command -computer SM06388.dom1.e-ssi.net -scriptblock {get-wmiobject   -Class win32_service -Filter "name='OpenLink_ADS_Fenix_PCT'"} | foreach-object {
if ($_.State -eq "running") 
{write-host $_.PSComputerName  $_.Name $_.State $_.StartMode -   ForegroundColor green
Get-WmiObject -Class Win32_Process -Filter "Name='java_svc_wrapper.exe'"|     ForEach-Object{
$results += (Get-WmiObject Win32_Process -Filter  "ParentProcessId=$($_.ProcessId)").count} 
Write-host "No.of Child Java process $results" -ForegroundColor green
}
else 
{write-host $_.PSComputerName $_.Name $_.State $_.StartMode -ForegroundColor  red }
}
预期产出:

ADS services with Java processes
sm06388.dom1.e-ssi.net OpenLink_ADS_FENIX_PCT Running Auto
No.of Child Java process 11

谢谢,但是没有格式表,结果看起来包含了所有不必要的细节。我对编程很陌生,你能帮我显示数组长度和分组吗。我只是试着执行上面你粘贴的代码。但我得到了所有不需要的信息显示。谢谢,但没有格式表的结果看起来与所有的细节是不必要的。我对编程很陌生,你能帮我显示数组长度和分组吗。我只是试着执行上面你粘贴的代码。但是我得到了所有不需要的信息。谢谢Maigi。但您确定Get Process命令可以用于远程计算机吗?因为我不这么认为,因为它是引用MSDN的文档中的一个有效参数,所以我会说是的。我在发布Tanks Maigi之前也进行了验证。但您确定Get Process命令可以用于远程计算机吗?因为我不这么认为,因为它是引用MSDN的文档中的一个有效参数,所以我会说是的。我在发布之前也验证了它