변수에 대한 스크립트를 사용하여 프로세스 ID를 서비스 이름으로 가져오는 방법
이름이 지정된 서비스가 있습니다.WinDefend
프로세스에 따라 실행됩니다.svchost.exe
다른 많은 것들이 있습니다.svchost.exe
프로세스와 ID를 확인할 방법을 찾아야 합니다.
달리면tasklist /svc
볼 수 있습니다.
제가 그것을 어떻게 받을 수 있을지 잘 모르겠습니다.
이 명령을 찾았지만 시도해보니select "PID"
그것은 나에게 빈 칸을 주었습니다.
저는 공정의 PID를 변수로 만들어야 합니다.
tasklist
는 텍스트만 반환하고 액세스할 수 있는 속성을 가진 실제 개체는 반환하지 않습니다.대신 WMI를 사용하여 이 정보를 가져올 수 있습니다.
$id = Get-WmiObject -Class Win32_Service -Filter "Name LIKE 'WinDefend'" |
Select-Object -ExpandProperty ProcessId
$process = Get-Process -Id $id
PowerShell Core 업데이트
버전 6에서 윈도우즈 PowerShell은 에 기반한 PowerShell Core를 통해 플랫폼 간 지원을 시작했습니다.NET 코어.이로 인해 윈도우즈 중심의 cmdlet이 많이 변경되었으며 일부는 완전히 제외되었습니다.WMI는 윈도우즈 전용 기술이므로 해당 cmdlet(예: Get-WmiObject)은 포팅되지 않았습니다.그러나 이 기능은 CIM cmdlet(예: Get-CimInstance)을 통해 사용할 수 있습니다. 여기 PowerShell 6+에서 작동하는 버전이 있습니다.
$id = Get-CimInstance -Class Win32_Service -Filter "Name LIKE 'WinDefend'" |
Select-Object -ExpandProperty ProcessId
$process = Get-Process -Id $id
$p=Tasklist /svc /fi "SERVICES eq windefend" /fo csv | convertfrom-csv
$p.PID
번거롭지만 현재 프로세스에 대한 pid를 원하는 경우 스크립트에 대한 고유한 제목을 설정해야 합니다.그런 다음 프로세스 목록에서 고유한 제목을 검색합니다.고맙게도 제목 명령을 사용하면 이 작업을 수행할 수 있습니다.MagicAndi의 반응도 확인할 수 있습니다.
내 배치 파일 솔루션은 다음과 같습니다.
@ECHO OFF
:SetVars
SET _Thread=%1
title=ExecBatch_%_Thread%
Set /A "_iPID=0"
:Main
CALL :getPID _iPID %_Thread%
...
EXIT /b
::----------------
::---- GetPID ----
::----------------
:getPID
setlocal
set _getPIDcmd=tasklist /v /fo csv
for /f "tokens=2 delims=," %%i in ('%_getPIDcmd% ^| findstr /i "ExecBatch_%2"') do (
echo %%~i
set _pid=%%~i
)
endlocal & Set %~1=%_pid%
exit /b
그나저나, 저는 수년간 API, 또는 배치 또는 ps를 통해 이 일을 반복하는 '기쁨'을 느껴왔습니다.독약을 선택하세요 - Windows 플랫폼에서는 모두 동일합니다.
powershell을 통해 더 나은 방법을 찾았습니다. $pid는 현재 프로세스의 프로세스 ID를 반환합니다.
# Enter servicename. (instead of 'netman')
$service = Get-CimInstance -class win32_service | Where-Object name -eq 'netman' | select name, processid
$process = Get-Process | Where-Object ID -EQ $service.processid
Clear-Host
Write-Host '********* ServiceName, PID and ProcessName ******'
Write-Host 'ServiceName:' $service.name
Write-Host 'ID:' $process.Id
Write-Host 'ProcessName:' $process.Name
감사해요.
프로세스 PID를 가져오는 다른 방법:
$serviceName = 'svchost.exe'
$pidArgumentPlacement = 1
# Call for the verbose version of tasklist and filter it for the line with your service's name.
$serviceAsCSVString = tasklist /v /fo csv | findstr /i $serviceName
# Remove the quotes from the CSV string
$serviceCSVStringWithoutQuotes = $serviceAsCSVString -replace '["]'
# Turn the string into an array by cutting at the comma
$serviceAsArray = $serviceCSVStringWithoutQuotes -split ","
# Get the pid from the array
$servicePID = $serviceAsArray[$pidArgumentPlacement]
또는 다음과 같이 요약할 수 있습니다.
$servicePID = $($($(tasklist /v /fo csv | findstr /i $serviceName) -replace '["]') -split ",")[$pidArgumentPlacement]
참고: 이렇게 하면 고객과 일치하는 첫 번째 서비스를 얻을 수 있습니다.$serviceName
여러 인스턴스(예: 슬랙)를 실행하는 서비스를 실행하면 첫 번째 pid만 얻을 수 있습니다.tasklist /v /fi "IMAGENAME eq slack.exe" /fo csv
각 CSV 줄이 배열 항목인 배열을 반환합니다.다음을 사용하여 필터링할 수도 있습니다.findstr
열 이름을 가져오지 않도록 합니다.
편집: WinDefend는 프로그램의 하위 서비스입니다(이 경우).svchost.exe
) 다음에 대한 자세한 플래그를 교체해야 할 수 있습니다.tasklist
로./svc
이와 같이:
$serviceAsCSVString = tasklist /svc /fo csv | findstr /i $serviceName
또는 필터를 통해 서비스 이름을 검색합니다.
$serviceAsCSVString = tasklist /svc /fi "SERVICES eq $serviceName" /fo csv | findstr /i $serviceName
그리고 필터가 열 이름 행과 찾으려는 행을 반환한다는 점을 고려합니다.
$serviceCSVStringWithoutQuotes = $serviceAsCSVString[1] -replace '["]'
변했다고 하면,$serviceName
WinDefend
에 svchost.exe
.
Get-Process -Id ((Get-WmiObject -Class Win32_Service -Filter "Name -eq 'WinDefend'").ProcessId)
대답은 간단하다.(get -wmiobject -get "select * from win32_service" 여기서 name='sevicename'."processid).우선 순위 클래스="우선 순위"
이 명령을 수행하면 지정된 서비스가 svchost에 있더라도 설정됩니다.
편집됨: PID만 찾고 있습니다. 우선순위 설정을 제외하고 동일한 명령을 수행하십시오.우선순위를 정하는 데 쓰실 거라고 생각했는데 히히.
저는 이것을 사용했고 잘 작동합니다. YMMV.
$ProcessName = "SomeProcessName"
$pidnumber = Get-Process -Name $ProcessName | Select -expand ID
언급URL : https://stackoverflow.com/questions/26331183/how-to-get-process-id-by-its-service-name-with-a-script-to-variable
'source' 카테고리의 다른 글
Twitter 부트스트랩 모달 전체 화면을 만드는 방법 (0) | 2023.08.14 |
---|---|
사용자가 모바일 Safari에서 탐색했는지 확인 (0) | 2023.08.14 |
앵커 태그 내에서 제목 속성의 스타일을 변경하는 방법은 무엇입니까? (0) | 2023.08.14 |
노드 앱을 실행할 때 bcrypt 잘못된 엘프 헤더 (0) | 2023.08.14 |
올바른 GROUP BY 쿼리가 Oracle에서 INSERT INTO와 결합될 때 작동하지 않음 (0) | 2023.08.14 |