Получение списка всех процессов
Подскажите как получить список ВСЕХ процессов с "временем запуска"?
Получить дату и время запуска всех процессов в текстовый файл.
По возможности не на PowerShell. cmd,bat.
|
DJ Mogarych |
03-01-2020 09:49 2903319 |
CMD:
Код:
powershell -command "Get-Process |select name,starttime |Out-File c:\temp\processlist.txt"
|
Код:
>"c:\temp\processlist.txt" wmic.exe Process get Name, CreationDate
|
DJ Mogarych |
03-01-2020 10:27 2903329 |
Iska, а формат даты можно как-нибудь подкрутить?
|
DJ Mogarych, я догадываюсь, что топикстартеру, всё едино: что водка, что пулемёт - лишь бы с ног валило
и самому мне нравится PowerShell, но давайте всё же придерживаться заданной тематики
PoSh - не панацея:
1. Он не всегда есть - в том же PE, контейнерах
2. Он тяжело запускается - "примитивный" healthcheck, реализованный подобным образом, выжирает нереально много ресурсов
|
DJ Mogarych, напрямую — боюсь, что нет. Возможно, этого можно добиться, поковырявшись во внутренностях C:\Windows\System32\wbem, но я не жажду ;). Wbem-то рассчитано в первую очередь на работу с приложениями посредством Automation, а wmic.exe — это такой паллиатив, появившийся в Windows XP — для тех, кто не сумел в тот же WSH.
Кроме того, можно разобрать вывод wmic.exe посредством for /f, и там слепить, что потребно. Наподобие:
Скрытый текст
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
>"c:\temp\processlist.txt" (
echo Creation Date/Time Name
for /f "usebackq skip=2 tokens=1,2" %%i in (`wmic.exe Process get Name^, CreationDate ^| findstr.exe /i /r /c:"^[0-9]"`) do (
set sDateTime=%%i
echo !sDateTime:~6,2!.!sDateTime:~4,2!.!sDateTime:~0,4! !sDateTime:~8,2!:!sDateTime:~10,2!:!sDateTime:~12,2! %%~j
)
)
endlocal
exit /b 0
|
VBS. Добавил еще полный путь к исполняемому файлу процесса
Код:
With CreateObject("Scripting.FileSystemObject").CreateTextFile("Z:\Box_Out\process.txt", True)
Out = "Creation Date Caption and ExecutablePath"
For Each iProc In GetObject("winmgmts:").ExecQuery("Select * From Win32_Process")
With iProc
DT = CStr(.CreationDate)
Out = Out + vbCrLf + Mid(DT, 1, 4) + "." + Mid(DT, 5, 2) + "." + Mid(DT, 7, 2) + " " + Mid(DT, 9, 2) + ":" + Mid(DT, 11, 2) + ":" + Mid(DT, 13, 2) + " " + .Caption
If Not IsNull(.ExecutablePath) Then Out = Out + " " + .ExecutablePath
End With
Next
.Write Out
.Close
End With
|
Круто! Спасибо большое! всё работает!
Конечный результат выглядит так: (???)
Код:
powershell -command "Get-Process |select name,starttime |Out-File c:\temp\processlist.txt"
@echo off
setlocal enableextensions enabledelayedexpansion
>"c:\temp\processlist.txt" (
echo Creation Date/Time Name
for /f "usebackq skip=2 tokens=1,2" %%i in (`wmic.exe Process get Name^, CreationDate ^| findstr.exe /i /r /c:"^[0-9]"`) do (
set sDateTime=%%i
echo !sDateTime:~6,2!.!sDateTime:~4,2!.!sDateTime:~0,4! !sDateTime:~8,2!:!sDateTime:~10,2!:!sDateTime:~12,2! %%~j
)
)
endlocal
exit /b 0
Или как-то изящней надо сделать?(допускаю что фигню пишу)
|
Цитата:
Цитата NLOLegion
допускаю что фигню пишу »
|
Ага. Файл c:\temp\processlist.txt у Вас создаётся дважды: сначала посредством PowerShell, а затем переписывается поверх непосредственно из кода пакетного файла.
Цитата:
Цитата megaloman
Mid(DT, 1, 4) + "." + Mid(DT, 5, 2) + "." + Mid(DT, 7, 2) + " " + Mid(DT, 9, 2) + ":" + Mid(DT, 11, 2) + ":" + Mid(DT, 13, 2) »
|
Правильнее будет так:
Скрытый текст
Код:
Option Explicit
Dim objSWbemServicesEx
Dim objSWbemDateTime
Dim objSWbemObjectEx
Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemDateTime = WScript.CreateObject("WbemScripting.SWbemDateTime")
WScript.Echo "Creation Date/Time" & vbTab & "Name"
For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT Name, CreationDate FROM Win32_Process")
objSWbemDateTime.Value = objSWbemObjectEx.CreationDate
WScript.Echo objSWbemDateTime.GetVarDate() & vbTab & objSWbemObjectEx.Name
Next
Set objSWbemDateTime = Nothing
Set objSWbemServicesEx = Nothing
WScript.Quit 0
|
DJ Mogarych |
03-01-2020 16:15 2903385 |
Ещё вариант:
Код:
powershell -command "gcim win32_process |select name,creationdate |Out-File c:\temp\processlist.txt"
gcim сразу даёт нормальный формат времени, в отличие от gwmi, который даёт DTMF datetime. Однако, это можно сконвертировать:
Код:
powershell -command "gwmi win32_process |select name,@{n='starttime';e={$_.converttodatetime($_.creationdate)}} |Out-File c:\temp\processlist.txt"
Цитата:
Цитата Busla
я догадываюсь, что топикстартеру, всё едино: что водка, что пулемёт - лишь бы с ног валило »
|
Из этого я и исходил. Полагаю, что если бы задача требовала каких-то спецусловий, это было бы упомянуто.
|
Время: 15:06.
© OSzone.net 2001-